diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44d382999..147b888f4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,6 +35,12 @@ jobs: - "singularity" test_name: - "test" + - "test_minimal" + - "test_modern" + - "test_microbial" + - "test_shortdna" + - "test_humanpopgen" + - "test_long" isMaster: - ${{ github.base_ref == 'master' }} # Exclude conda and singularity on dev @@ -94,4 +100,4 @@ jobs: - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{matrix.profile}},${{ matrix.test_name }}${{ matrix.PARAMS }} --outdir ./results + nextflow run ${GITHUB_WORKSPACE} -profile ${{matrix.profile}},${{ matrix.test_name }} --outdir ./results diff --git a/conf/modules.config b/conf/modules.config index 6f12ccb59..2050bdc85 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -15,15 +15,15 @@ process { publishDir = [ path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] - withName: 'MULTIQC' { - ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' } + withName: MULTIQC { + ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' } publishDir = [ path: { "${params.outdir}/multiqc" }, mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } @@ -31,7 +31,7 @@ process { // CONVERT INPUT BAM // withName: SAMTOOLS_CONVERT_BAM_INPUT { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ enabled: false @@ -39,7 +39,7 @@ process { } withName: CAT_FASTQ_CONVERTED_BAM { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ enabled: false @@ -50,12 +50,11 @@ process { // READ PREPROCESSING // withName: FASTQC { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = '--quiet' + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = '--quiet' ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // stats path: { "${params.outdir}/preprocessing/fastqc_raw/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -64,12 +63,11 @@ process { } withName: FASTQC_PROCESSED { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = '--quiet' + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = '--quiet' ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // stats path: { "${params.outdir}/preprocessing/fastqc_processed/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -78,12 +76,11 @@ process { } withName: FALCO { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = '--quiet' + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = '--quiet' ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // stats path: { "${params.outdir}/preprocessing/falco_raw/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -92,12 +89,11 @@ process { } withName: FALCO_PROCESSED { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = '--quiet' + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = '--quiet' ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // stats path: { "${params.outdir}/preprocessing/falco_processed/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -106,71 +102,61 @@ process { } withName: FASTP_SINGLE { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.args = [ - // TRIMMING OPTIONS params.preprocessing_trim5p != 0 ? "--trim_front1 ${params.preprocessing_trim5p}" : "", params.preprocessing_trim3p != 0 ? "--trim_tail1 ${params.preprocessing_trim3p}" : "", - params.preprocessing_skipadaptertrim ? "--disable_adapter_trimming" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter_sequence ${params.preprocessing_adapter1}" : "", // adding adapter list happens at module input channel level - // FILTERING OPTIONS + params.preprocessing_skipadaptertrim ? "--disable_adapter_trimming" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter_sequence ${params.preprocessing_adapter1}" : "", "--length_required ${params.preprocessing_minlength}", - params.preprocessing_fastp_complexityfilter ? "--low_complexity_filter --complexity_threshold ${params.preprocessing_fastp_complexityfilter_threshold}" : "" + params.preprocessing_fastp_complexityfilter ? "--low_complexity_filter --complexity_threshold ${params.preprocessing_fastp_complexityfilter_threshold}" : "", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // data path: { "${params.outdir}/preprocessing/fastp/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.preprocessing_savepreprocessedreads + enabled: params.preprocessing_savepreprocessedreads, ], [ - //stats path: { "${params.outdir}/preprocessing/fastp/stats/" }, mode: params.publish_dir_mode, - pattern: '*.{log,html,json}' - ] + pattern: '*.{log,html,json}', + ], ] } withName: FASTP_PAIRED { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.args = [ - // COLLAPSING OPTIONS - option to retain singletons params.preprocessing_excludeunmerged ? "" : "--include_unmerged", - // TRIMMING OPTIONS params.preprocessing_trim5p != 0 ? "--trim_front1 ${params.preprocessing_trim5p} --trim_front2 ${params.preprocessing_trim5p}" : "", params.preprocessing_trim3p != 0 ? "--trim_tail1 ${params.preprocessing_trim3p} --trim_tail2 ${params.preprocessing_trim3p}" : "", - params.preprocessing_skipadaptertrim ? "--disable_adapter_trimming" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter_sequence ${params.preprocessing_adapter1}" : "", // adding adapter list happens at module input channel level - params.preprocessing_skipadaptertrim ? "" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter2 ? "--adapter_sequence_r2 ${params.preprocessing_adapter2}" : "", // adding adapter list happens at module input channel level - // FILTERING OPTIONS--disable_adapter_trimming + params.preprocessing_skipadaptertrim ? "--disable_adapter_trimming" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter_sequence ${params.preprocessing_adapter1}" : "", + params.preprocessing_skipadaptertrim ? "" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter2 ? "--adapter_sequence_r2 ${params.preprocessing_adapter2}" : "", "--length_required ${params.preprocessing_minlength}", - params.preprocessing_fastp_complexityfilter ? "--low_complexity_filter --complexity_threshold ${params.preprocessing_fastp_complexityfilter_threshold}" : "" + params.preprocessing_fastp_complexityfilter ? "--low_complexity_filter --complexity_threshold ${params.preprocessing_fastp_complexityfilter_threshold}" : "", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // data path: { "${params.outdir}/preprocessing/fastp/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.preprocessing_savepreprocessedreads + enabled: params.preprocessing_savepreprocessedreads, ], [ - // stats path: { "${params.outdir}/preprocessing/fastp/stats/" }, mode: params.publish_dir_mode, - pattern: '*.{log,html,json}' - ] + pattern: '*.{log,html,json}', + ], ] } withName: ADAPTERREMOVAL_SINGLE { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.args = [ - // trimming options - note: adding adapter list happens at module input channel level - params.preprocessing_skipadaptertrim ? "--adapter1 ''" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter1 ${params.preprocessing_adapter1}" : "", // adding adapter list happens at module input channel level + params.preprocessing_skipadaptertrim ? "--adapter1 ''" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter1 ${params.preprocessing_adapter1}" : "", params.preprocessing_skipadaptertrim ? "--adapter2 ''" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter2 ? "--adapter2 ${params.preprocessing_adapter2}" : "", "--minadapteroverlap ${params.preprocessing_adapterremoval_adapteroverlap}", params.preprocessing_adapterremoval_preserve5p ? "--preserve5p" : "", @@ -179,33 +165,28 @@ process { !params.preprocessing_adapterremoval_skipqualitytrimming ? "--trimqualities --minquality ${params.preprocessing_adapterremoval_trimbasequalitymin}" : "", !params.preprocessing_adapterremoval_skipntrimming ? "--trimns" : "", "--qualitymax ${params.preprocessing_adapterremoval_qualitymax}", - // filtering options - "--minlength ${params.preprocessing_minlength}" + "--minlength ${params.preprocessing_minlength}", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // data path: { "${params.outdir}/preprocessing/adapterremoval/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.preprocessing_savepreprocessedreads + enabled: params.preprocessing_savepreprocessedreads, ], [ - // stats path: { "${params.outdir}/preprocessing/adapterremoval/stats/" }, mode: params.publish_dir_mode, - pattern: '*.settings' - ] + pattern: '*.settings', + ], ] } withName: ADAPTERREMOVAL_PAIRED { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.args = [ - // COLLAPSING OPTIONS params.preprocessing_skippairmerging ? "" : "--collapse", - // TRIMMING OPTIONS - note: adding adapter list happens at module input channel level params.preprocessing_skipadaptertrim ? "--adapter1 ''" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter1 ? "--adapter1 ${params.preprocessing_adapter1}" : "", params.preprocessing_skipadaptertrim ? "--adapter2 ''" : params.preprocessing_adapterlist ? "" : params.preprocessing_adapter2 ? "--adapter2 ${params.preprocessing_adapter2}" : "", "--minadapteroverlap ${params.preprocessing_adapterremoval_adapteroverlap}", @@ -215,39 +196,35 @@ process { !params.preprocessing_adapterremoval_skipqualitytrimming ? "--trimqualities --minquality ${params.preprocessing_adapterremoval_trimbasequalitymin}" : "", !params.preprocessing_adapterremoval_skipntrimming ? "--trimns" : "", "--qualitymax ${params.preprocessing_adapterremoval_qualitymax}", - // FILTERING OPTIONS - "--minlength ${params.preprocessing_minlength}" + "--minlength ${params.preprocessing_minlength}", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ [ - // data path: { "${params.outdir}/preprocessing/adapterremoval/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.preprocessing_savepreprocessedreads + enabled: params.preprocessing_savepreprocessedreads, ], [ - // stats path: { "${params.outdir}/preprocessing/adapterremoval/stats/" }, mode: params.publish_dir_mode, - pattern: '*.settings' - ] + pattern: '*.settings', + ], ] } withName: CAT_FASTQ_ADAPTERREMOVAL { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ - [ - // data - path: { "${params.outdir}/preprocessing/adapterremoval/data/" }, - mode: params.publish_dir_mode, - pattern: '*.fastq.gz', - enabled: params.preprocessing_savepreprocessedreads - ] + [ + path: { "${params.outdir}/preprocessing/adapterremoval/data/" }, + mode: params.publish_dir_mode, + pattern: '*.fastq.gz', + enabled: params.preprocessing_savepreprocessedreads, ] + ] } @@ -257,11 +234,10 @@ process { withName: GUNZIP_FASTA { publishDir = [ [ - // data path: { "${params.outdir}/references/fasta/data/" }, mode: params.publish_dir_mode, pattern: '*.{fasta,fna,fas,fa}', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -275,11 +251,10 @@ process { withName: SAMTOOLS_FAIDX { publishDir = [ [ - // data path: { "${params.outdir}/references/fasta/data/" }, mode: params.publish_dir_mode, pattern: '*.fai', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -287,11 +262,10 @@ process { withName: PICARD_CREATESEQUENCEDICTIONARY { publishDir = [ [ - // data path: { "${params.outdir}/references/fasta/data/" }, mode: params.publish_dir_mode, pattern: '*.dict', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -299,11 +273,10 @@ process { withName: BOWTIE2_BUILD { publishDir = [ [ - // data path: { "${params.outdir}/references/bowtie2/data/" }, mode: params.publish_dir_mode, pattern: 'bowtie2', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -311,11 +284,10 @@ process { withName: BWA_INDEX { publishDir = [ [ - // data path: { "${params.outdir}/references/bwa/data/" }, mode: params.publish_dir_mode, pattern: 'bwa', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -324,24 +296,22 @@ process { withName: GUNZIP_ELONGATED_FASTA { publishDir = [ [ - // data path: { "${params.outdir}/references/fasta/data/" }, mode: params.publish_dir_mode, pattern: '*_*[0-9].{fasta,fna,fas,fa}', - enabled: params.save_reference + enabled: params.save_reference, ] ] } withName: CIRCULARMAPPER_CIRCULARGENERATOR { - tag = { "${meta.id}_${params.fasta_circularmapper_elongationfactor}" } + tag = { "${meta.id}_${params.fasta_circularmapper_elongationfactor}" } publishDir = [ [ - // data path: { "${params.outdir}/references/fasta/data/" }, mode: params.publish_dir_mode, pattern: '*_*[0-9].fasta', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -349,11 +319,10 @@ process { withName: BWA_INDEX_CIRCULARISED { publishDir = [ [ - // data path: { "${params.outdir}/references/bwa/data/" }, mode: params.publish_dir_mode, pattern: 'bwa', - enabled: params.save_reference + enabled: params.save_reference, ] ] } @@ -370,16 +339,18 @@ process { // // BAM INPUT // + + withName: SAMTOOLS_INDEX_BAM_INPUT { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } publishDir = [ enabled: false ] } withName: SAMTOOLS_MERGE_LANES_BAMINPUT { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.run_fastq_sharding ? "-c -p" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.run_fastq_sharding ? "-c -p" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ enabled: false @@ -387,36 +358,33 @@ process { } withName: SAMTOOLS_SORT_MERGED_LANES_BAMINPUT { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_sorted" } publishDir = [ - // data path: { "${params.outdir}/mapping/${params.mapping_tool}/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bam}' + pattern: '*.{bam}', ] } withName: SAMTOOLS_INDEX_MERGED_LANES_BAMINPUT { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ - // data path: { "${params.outdir}/mapping/${params.mapping_tool}/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] } withName: SAMTOOLS_FLAGSTAT_MERGED_LANES_BAMINPUT { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_sorted" } publishDir = [ - // stats path: { "${params.outdir}/mapping/bam_input/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] } @@ -424,105 +392,98 @@ process { // BAM FILTERING // withName: FILTER_BAM_FRAGMENT_LENGTH { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = "-l ${params.bamfiltering_minreadlength}" + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = "-l ${params.bamfiltering_minreadlength}" ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/read_filtering/filtered_bams/data/" }, mode: params.publish_dir_mode, pattern: '*.filtered.bam', - enabled: params.bamfiltering_savefilteredbams + enabled: params.bamfiltering_savefilteredbams, ] ] } withName: SAMTOOLS_VIEW_BAM_FILTERING { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = [ + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = [ "-q ${params.bamfiltering_mappingquality}", params.bamfiltering_retainunmappedgenomicbam ? '' : "-F ${params.bamfiltering_genomicbamfilterflag}", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_filtered" } publishDir = [ [ - // data path: { "${params.outdir}/read_filtering/filtered_bams/data/" }, mode: params.publish_dir_mode, pattern: '*.bam', - enabled: params.bamfiltering_savefilteredbams + enabled: params.bamfiltering_savefilteredbams, ] ] } withName: 'SAMTOOLS_LENGTH_FILTER_INDEX|SAMTOOLS_FILTER_INDEX' { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_filtered" } publishDir = [ [ - // data path: { "${params.outdir}/read_filtering/filtered_bams/data/" }, mode: params.publish_dir_mode, pattern: '*.{bai,csi}', - enabled: params.bamfiltering_savefilteredbams + enabled: params.bamfiltering_savefilteredbams, ] ] } withName: SAMTOOLS_FLAGSTAT_FILTERED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_filtered" } publishDir = [ [ - // stats path: { "${params.outdir}/read_filtering/filtered_bams/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] ] } withName: SAMTOOLS_FASTQ_SAVEBAMFILTERINGREADS { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_bamfiltering_fastq" } publishDir = [ [ - // data path: { "${params.outdir}/read_filtering/fastq/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.bamfiltering_generatefastq + enabled: params.bamfiltering_generatefastq, ] ] } withName: SAMTOOLS_FASTQ_METAGENOMICS { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = [ - params.metagenomics_input == 'mapped' ? '-F 4': '', - params.metagenomics_input == 'unmapped' ? '-f 4': '', - // 'all' is left then with NO -F or -f flag, therefore all reads get sent to fastq + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = [ + params.metagenomics_input == 'mapped' ? '-F 4' : '', + params.metagenomics_input == 'unmapped' ? '-f 4' : '', ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_metagenomics_fastq_${params.metagenomics_input}" } publishDir = [ [ - // data path: { "${params.outdir}/read_filtering/fastq/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.metagenomics_input_savefastq + enabled: params.metagenomics_input_savefastq, ] ] } - withName: 'CAT_FASTQ_METAGENOMICS' { - tag = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } + withName: CAT_FASTQ_METAGENOMICS { + tag = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - enabled: false // NO publishing of concatenated fastq files for metagenomics, only outputs from SAMTOOLS_FASTQ_METAGENOMICS + enabled: false ] ] } @@ -531,9 +492,9 @@ process { // SHARDING FASTQS // withName: SEQKIT_SPLIT2 { - tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + tag = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.prefix = "out" - ext.args = "-s ${params.fastq_shard_size}" + ext.args = "-s ${params.fastq_shard_size}" publishDir = [ enabled: false ] @@ -543,8 +504,8 @@ process { // READ MAPPING // withName: BWA_ALN { - tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { "-n ${params.mapping_bwaaln_n} -k ${params.mapping_bwaaln_k} -l ${params.mapping_bwaaln_l} -o ${params.mapping_bwaaln_o}" } + tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { "-n ${params.mapping_bwaaln_n} -k ${params.mapping_bwaaln_k} -l ${params.mapping_bwaaln_l} -o ${params.mapping_bwaaln_o}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.id_index}" } publishDir = [ enabled: false @@ -552,21 +513,22 @@ process { } withName: 'BWA_SAMSE|BWA_SAMPE' { - tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { + tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { se_pe_string = meta.single_end ? "SE" : "PE" [ "-r '@RG\\tID:ILLUMINA-${meta.sample_id}_${meta.library_id}\\tSM:${meta.sample_id}\\tLB:${meta.library_id}\\tPL:illumina\\tPU:ILLUMINA-${meta.library_id}-${meta.strandedness}_stranded-${se_pe_string}'" - ].join(' ').trim() } + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.id_index}" } publishDir = [ enabled: false ] } - withName: ".*MAP:FASTQ_ALIGN_BWAALN:SAMTOOLS_INDEX" { - tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + withName: '.*MAP:FASTQ_ALIGN_BWAALN:SAMTOOLS_INDEX' { + tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ enabled: false @@ -574,14 +536,15 @@ process { } withName: BWA_MEM { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { se_pe_string = meta.single_end ? "SE" : "PE" [ "-k ${params.mapping_bwamem_k}", "-r ${params.mapping_bwamem_r}", - "-R '@RG\\tID:ILLUMINA-${meta.sample_id}_${meta.library_id}\\tSM:${meta.sample_id}\\tLB:${meta.library_id}\\tPL:illumina\\tPU:ILLUMINA-${meta.library_id}-${meta.strandedness}_stranded-${se_pe_string}'" - ].join(' ').trim() } + "-R '@RG\\tID:ILLUMINA-${meta.sample_id}_${meta.library_id}\\tSM:${meta.sample_id}\\tLB:${meta.library_id}\\tPL:illumina\\tPU:ILLUMINA-${meta.library_id}-${meta.strandedness}_stranded-${se_pe_string}'", + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ enabled: false @@ -589,8 +552,8 @@ process { } withName: BOWTIE2_ALIGN { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { se_pe_string = meta.single_end ? "SE" : "PE" [ "-N ${params.mapping_bowtie2_n}", @@ -603,14 +566,18 @@ process { "--rg LB:${meta.library_id}", "--rg PL:illumina", "--rg PU:ILLUMINA-${meta.sample_id}_${meta.library_id}-${meta.strandedness}_stranded-${se_pe_string}", - "${params.mapping_bowtie2_alignmode}" == 'local' ? "--local --${params.mapping_bowtie2_sensitivity}-local" : ( "${params.mapping_bowtie2_alignmode}" == 'end-to-end' ? "--end-to-end --${params.mapping_bowtie2_sensitivity}" : "" ) - ].join(' ').trim()} + "${params.mapping_bowtie2_alignmode}" == 'local' ? "--local --${params.mapping_bowtie2_sensitivity}-local" : ("${params.mapping_bowtie2_alignmode}" == 'end-to-end' ? "--end-to-end --${params.mapping_bowtie2_sensitivity}" : ""), + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ enabled: false ] } + withName: 'SAMTOOLS_INDEX_MEM|SAMTOOLS_INDEX_BT2' { + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { params.fasta_largeref ? "-c" : "" } withName: MAPAD_MAP { tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } ext.args = { @@ -646,50 +613,47 @@ process { } withName: SAMTOOLS_MERGE_LANES { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ enabled: false ] - ext.args = { params.run_fastq_sharding ? "-c -p" : "" } + ext.args = { params.run_fastq_sharding ? "-c -p" : "" } } withName: SAMTOOLS_SORT_MERGED_LANES { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_sorted" } publishDir = [ [ - // data path: { "${params.outdir}/mapping/${params.mapping_tool}/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bam}' + pattern: '*.{bam}', ] ] } withName: SAMTOOLS_INDEX_MERGED_LANES { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/mapping/${params.mapping_tool}/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] ] } withName: SAMTOOLS_FLAGSTAT_MERGED_LANES { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_sorted" } publishDir = [ [ - // stats path: { "${params.outdir}/mapping/${params.mapping_tool}/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] ] } @@ -697,26 +661,26 @@ process { // Circular mapping // Configuration for BWA_ALN and BWA_SAMSE/SAMPE is the same as for the non-circular mapping withName: CIRCULARMAPPER_REALIGNSAMFILE { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { params.mapping_circularmapper_circularfilter ? "-f true -x true" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { params.mapping_circularmapper_circularfilter ? "-f true -x true" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ enabled: false ] } - withName: ".*MAP:CIRCULARMAPPER:FASTQ_ALIGN_BWAALN_ELONGATED:SAMTOOLS_INDEX" { - tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + withName: '.*MAP:CIRCULARMAPPER:FASTQ_ALIGN_BWAALN_ELONGATED:SAMTOOLS_INDEX' { + tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ enabled: false ] } - withName: ".*MAP:CIRCULARMAPPER:SAMTOOLS_INDEX_REALIGNED" { - tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + withName: '.*MAP:CIRCULARMAPPER:SAMTOOLS_INDEX_REALIGNED' { + tag = { "${meta.id_index}|${meta.sample_id}_${meta.library_id}_L${meta.lane}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_L${meta.lane}_${meta.reference}" } publishDir = [ enabled: false @@ -727,11 +691,11 @@ process { // DEDUPLICATION // withName: PICARD_MARKDUPLICATES { - tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } - ext.args = [ + tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } + ext.args = [ "--REMOVE_DUPLICATES", "--VALIDATION_STRINGENCY SILENT", - "--ASSUME_SORTED" + "--ASSUME_SORTED", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_${meta.genomic_region}_MarkDuplicates" } publishDir = [ @@ -740,8 +704,8 @@ process { } withName: DEDUP { - tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } - ext.args = "--merged" + tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } + ext.args = "--merged" ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_${meta.genomic_region}_DeDup" } publishDir = [ enabled: false @@ -749,31 +713,30 @@ process { } withName: SAMTOOLS_MERGE_DEDUPPED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ enabled: false ] } - withName: ".*DEDUPLICATE:BUILD_INTERVALS" { + withName: '.*DEDUPLICATE:BUILD_INTERVALS' { publishDir = [ enabled: false ] } // Overwrite default SWF tag and prefix - withName: ".*BAM_SPLIT_BY_REGION:SAMTOOLS_VIEW" { - tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } + withName: '.*BAM_SPLIT_BY_REGION:SAMTOOLS_VIEW' { + tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_${meta.genomic_region}_dedupped" } publishDir = [ enabled: false ] } - withName: ".*BAM_SPLIT_BY_REGION:SAMTOOLS_INDEX" { - // The BAM_SPLIT_BY_REGION SWF only works with bais, so `params.fasta_largeref` should not be passed to it. - tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } + withName: '.*BAM_SPLIT_BY_REGION:SAMTOOLS_INDEX' { + tag = { "${meta.reference}:${meta.genomic_region}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_${meta.genomic_region}_dedupped" } publishDir = [ enabled: false @@ -781,41 +744,38 @@ process { } withName: SAMTOOLS_SORT_DEDUPPED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_dedupped" } publishDir = [ [ - // data path: { "${params.outdir}/deduplication/${params.deduplication_tool}/data/" }, mode: params.publish_dir_mode, - pattern: '*.bam' + pattern: '*.bam', ] ] } withName: SAMTOOLS_INDEX_DEDUPPED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_dedupped" } publishDir = [ [ - // data path: { "${params.outdir}/deduplication/${params.deduplication_tool}/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] ] } withName: SAMTOOLS_FLAGSTAT_DEDUPPED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_dedupped" } publishDir = [ [ - // stats path: { "${params.outdir}/deduplication/${params.deduplication_tool}/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] ] } @@ -824,17 +784,18 @@ process { // HOST REMOVAL // withName: HOST_REMOVAL { - tag = { "${meta.reference}|${meta_fastqs.sample_id}_${meta_fastqs.library_id}_L${meta_fastqs.lane}" } - ext.args = {[ - "-m ${params.host_removal_mode}", - "${meta_fastqs.single_end}" == false && "${params.preprocessing_skippairmerging}" == false ? "-merged" : "" - ].join(' ').trim()} + tag = { "${meta.reference}|${meta_fastqs.sample_id}_${meta_fastqs.library_id}_L${meta_fastqs.lane}" } + ext.args = { + [ + "-m ${params.host_removal_mode}", + "${meta_fastqs.single_end}" == false && "${params.preprocessing_skippairmerging}" == false ? "-merged" : "", + ].join(' ').trim() + } publishDir = [ [ - // data path: { "${params.outdir}/read_filtering/host_removal/data/" }, mode: params.publish_dir_mode, - pattern: '*.fq.gz' + pattern: '*.fq.gz', ] ] } @@ -843,25 +804,23 @@ process { // AUTHENTICATION // withName: ENDORSPY { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/endorspy/stats/" }, mode: params.publish_dir_mode, - pattern: '*.json' + pattern: '*.json', ] ] } withName: PRESEQ_CCURVE { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = "-B -s ${params.mapstats_preseq_stepsize}" + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = "-B -s ${params.mapstats_preseq_stepsize}" ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/preseq/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -870,7 +829,7 @@ process { } withName: PRESEQ_LCEXTRAP { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.args = [ "-B", "-s ${params.mapstats_preseq_stepsize}", @@ -878,12 +837,11 @@ process { "-x ${params.mapstats_preseq_terms}", "-n ${params.mapstats_preseq_bootstrap}", "-c ${params.mapstats_preseq_cval}", - params.mapstats_preseq_defects_mode ? '-D' : '' + params.mapstats_preseq_defects_mode ? '-D' : '', ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/preseq/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -892,19 +850,18 @@ process { } withName: SAMTOOLS_VIEW_GENOME { - tag = { "${meta.reference}|${meta.sample_id}" } + tag = { "${meta.reference}|${meta.sample_id}" } publishDir = [ enabled: false ] } withName: BEDTOOLS_COVERAGE_DEPTH { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = '-mean -nonamecheck' + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = '-mean -nonamecheck' ext.prefix = { "${meta.sample_id}_${meta.reference}_depth" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/bedtools/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -913,12 +870,11 @@ process { } withName: BEDTOOLS_COVERAGE_BREADTH { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = '-nonamecheck' + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = '-nonamecheck' ext.prefix = { "${meta.sample_id}_${meta.reference}_breadth" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/bedtools/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -928,12 +884,12 @@ process { withName: ANGSD_DOCOUNTS { ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = [ + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = [ "-iCounts 1", "-r ${params.contamination_estimation_angsd_chrom_name}:${params.contamination_estimation_angsd_range_from}-${params.contamination_estimation_angsd_range_to}", "-minMapQ ${params.contamination_estimation_angsd_mapq}", - "-minQ ${params.contamination_estimation_angsd_minq}" + "-minQ ${params.contamination_estimation_angsd_minq}", ].join(' ').trim() publishDir = [ enabled: false @@ -941,14 +897,13 @@ process { } withName: ANGSD_CONTAMINATION { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats - path: { "${params.outdir}/authentication/angsd_nuclear_contamination/stats/"}, + path: { "${params.outdir}/authentication/angsd_nuclear_contamination/stats/" }, mode: params.publish_dir_mode, - pattern: '*.txt' + pattern: '*.txt', ] ] } @@ -956,26 +911,24 @@ process { withName: PRINT_CONTAMINATION_ANGSD { publishDir = [ [ - // stats - path: { "${params.outdir}/authentication/angsd_nuclear_contamination/stats/"}, + path: { "${params.outdir}/authentication/angsd_nuclear_contamination/stats/" }, mode: params.publish_dir_mode, - pattern: 'nuclear_contamination*' + pattern: 'nuclear_contamination*', ] ] } withName: MTNUCRATIO { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } publishDir = [ enabled: false ] } withName: 'QUALIMAP_BAMQC_WITHBED|QUALIMAP_BAMQC_NOBED' { - tag = { "${meta.reference}|${meta.sample_id}" } + tag = { "${meta.reference}|${meta.sample_id}" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/qualimap/stats/${meta.reference}/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -984,19 +937,19 @@ process { } withName: BBMAP_BBDUK { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { "entropymask=f entropy=${params.metagenomics_complexity_entropy}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { "entropymask=f entropy=${params.metagenomics_complexity_entropy}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_complexity" } publishDir = [ path: { "${params.outdir}/metagenomics/complexity_filter/bbduk/" }, mode: params.publish_dir_mode, pattern: '*.{fastq.gz,log}', - enabled: params.metagenomics_complexity_savefastq + enabled: params.metagenomics_complexity_savefastq, ] } withName: MALT_RUN { - ext.args = [ + ext.args = [ "-m ${params.metagenomics_malt_mode}", "-at ${params.metagenomics_malt_alignmentmode}", "-top ${params.metagenomics_malt_toppercent}", @@ -1004,12 +957,12 @@ process { "-mq ${params.metagenomics_malt_maxqueries}", "--memoryMode ${params.metagenomics_malt_memorymode}", params.metagenomics_malt_minsupportmode == "percent" ? "-supp ${params.metagenomics_malt_minsupportpercent}" : "-sup ${params.metagenomics_malt_minsupportreads}", - params.metagenomics_malt_savereads ? "--alignments ./" : "" + params.metagenomics_malt_savereads ? "--alignments ./" : "", ].join(' ').trim() publishDir = [ path: { "${params.outdir}/metagenomics/profiling/malt/" }, mode: params.publish_dir_mode, - pattern: '*.{rma6,log,sam.gz}' + pattern: '*.{rma6,log,sam.gz}', ] ext.prefix = { "${meta.label}_${meta.id}-run" } } @@ -1019,29 +972,29 @@ process { publishDir = [ path: { "${params.outdir}/metagenomics/profiling/malt/" }, mode: params.publish_dir_mode, - pattern: '*.{log}' + pattern: '*.{log}', ] } withName: KRAKEN2_KRAKEN2 { - tag = { "${meta.sample_id}|single_end_mode_${meta.single_end}" } - ext.args = [ + tag = { "${meta.sample_id}|single_end_mode_${meta.single_end}" } + ext.args = [ params.metagenomics_kraken2_saveminimizers ? "--report-minimizer-data" : "" ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ path: { "${params.outdir}/metagenomics/profiling/kraken2/" }, mode: params.publish_dir_mode, - pattern: '*.{txt,fastq.gz}' + pattern: '*.{txt,fastq.gz}', ] } withName: KRAKENUNIQ_PRELOADEDKRAKENUNIQ { - tag = { "single_end_mode_${meta.single_end}" } + tag = { "single_end_mode_${meta.single_end}" } publishDir = [ path: { "${params.outdir}/metagenomics/profiling/krakenuniq/" }, mode: params.publish_dir_mode, - pattern: '*.{txt,fastq.gz}' + pattern: '*.{txt,fastq.gz}', ] ext.prefix = { "${meta.single_end}" } } @@ -1050,13 +1003,13 @@ process { publishDir = [ path: { "${params.outdir}/metagenomics/profiling/metaphlan/" }, mode: params.publish_dir_mode, - pattern: '*.{biom,txt}' + pattern: '*.{biom,txt}', ] ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } } withName: MALTEXTRACT { - ext.args = [ + ext.args = [ "-f ${params.metagenomics_maltextract_filter}", "-a ${params.metagenomics_maltextract_toppercent}", "--minPI ${params.metagenomics_maltextract_minpercentidentity}", @@ -1065,53 +1018,53 @@ process { params.metagenomics_maltextract_duplicateremovaloff ? "--dupRemOff" : "", params.metagenomics_maltextract_matches ? "--matches" : "", params.metagenomics_maltextract_megansummary ? "--meganSummary" : "", - params.metagenomics_maltextract_usetopalignment ? "--useTopAlignment" : "", + params.metagenomics_maltextract_usetopalignment ? "--useTopAlignment" : "", { meta.strandedness } == "single" ? '--singleStranded' : '', ].join(' ').trim() publishDir = [ path: { "${params.outdir}/metagenomics/postprocessing/maltextract/" }, mode: params.publish_dir_mode, pattern: 'results', - saveAs: { "${meta.id}" } + saveAs: { "${meta.id}" }, ] } withName: MEGAN_RMA2INFO { - tag = {"${meta.id}"} - ext.args = "-c2c Taxonomy" + tag = { "${meta.id}" } + ext.args = "-c2c Taxonomy" ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/metagenomics/postprocessing/megan_summaries/" }, mode: params.publish_dir_mode, - pattern: '*.{txt.gz,megan}' + pattern: '*.{txt.gz,megan}', ] } withName: AMPS { - publishDir = [ + publishDir = [ path: { "${params.outdir}/metagenomics/postprocessing/maltextract/" }, mode: params.publish_dir_mode, - pattern: 'results' + pattern: 'results', ] - errorStrategy = 'ignore' // required as it fails the run for low reads: https://github.com/rhuebler/HOPS/issues/9 + errorStrategy = 'ignore' } withName: TAXPASTA_MERGE { publishDir = [ path: { "${params.outdir}/metagenomics/postprocessing/taxpasta/" }, mode: params.publish_dir_mode, - pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}' + pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}', ] - ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}_taxpasta_table.tsv" } + ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}_taxpasta_table.tsv" } } withName: TAXPASTA_STANDARDISE { publishDir = [ path: { "${params.outdir}/metagenomics/postprocessing/taxpasta/" }, mode: params.publish_dir_mode, - pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}' + pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}', ] - ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}taxpasta_table.tsv" } + ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}taxpasta_table.tsv" } } // @@ -1119,7 +1072,7 @@ process { // withName: 'QUALIMAP_BAMQC_WITHBED|QUALIMAP_BAMQC_NOBED' { - tag = { "${meta.reference}|${meta.sample_id}" } + tag = { "${meta.reference}|${meta.sample_id}" } publishDir = [ path: { "${params.outdir}/mapstats/qualimap/${meta.reference}/" }, mode: params.publish_dir_mode, @@ -1131,16 +1084,15 @@ process { // DAMAGE CALCULATION // withName: DAMAGEPROFILER { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.args = [ "-l ${params.damagecalculation_damageprofiler_length}", "-t ${params.damagecalculation_xaxis}", - "-yaxis_dp_max ${params.damagecalculation_yaxis}" + "-yaxis_dp_max ${params.damagecalculation_yaxis}", ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/damageprofiler/stats/" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, @@ -1149,40 +1101,40 @@ process { } withName: CALCULATE_MAPDAMAGE2 { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { [ - "--no-stats", - "-y ${params.damagecalculation_yaxis}", - params.damagecalculation_mapdamage_downsample != 0 ? "-n ${params.damagecalculation_mapdamage_downsample} --downsample-seed=1" : "", - { meta.strandedness } == "single" ? '--single-stranded' : '', - "-m ${params.damagecalculation_xaxis}" - ].join(' ').trim() } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { + [ + "--no-stats", + "-y ${params.damagecalculation_yaxis}", + params.damagecalculation_mapdamage_downsample != 0 ? "-n ${params.damagecalculation_mapdamage_downsample} --downsample-seed=1" : "", + { meta.strandedness } == "single" ? '--single-stranded' : '', + "-m ${params.damagecalculation_xaxis}", + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/mapdamage2/stats/" }, mode: params.publish_dir_mode, - pattern: 'results_*/*' + pattern: 'results_*/*', ] ] } withName: SAMTOOLS_DEPTH_SEXDETERRMINE { - tag = { "${meta1.reference}|${meta1.sample_id}" } + tag = { "${meta1.reference}|${meta1.sample_id}" } ext.prefix = { "${meta2.id}_samtoolsdepth" } - ext.args = '-aa -q30 -Q30 -H' + ext.args = '-aa -q30 -Q30 -H' publishDir = [ enabled: false ] } withName: SEXDETERRMINE { - tag = { "${meta.reference}|${meta.sample_id}" } + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.reference}_sexdeterrmine" } publishDir = [ [ - // stats path: { "${params.outdir}/authentication/sexdeterrmine/stats/" }, mode: params.publish_dir_mode, pattern: '*{_sexdeterrmine}*', @@ -1197,125 +1149,119 @@ process { ext.prefix = { "${meta.id}.masked" } publishDir = [ [ - // data path: { "${params.outdir}/references/masked_reference/data/" }, mode: params.publish_dir_mode, - pattern: '*.masked.fa' + pattern: '*.masked.fa', ] ] } withName: MAPDAMAGE2 { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { [ - "--rescale", - // "--rescale-out=${task.ext.prefix}.bam", // This doesn't work, because the output is expected to be in the mapdamage results dir. - "--seq-length=${params.damage_manipulation_rescale_seqlength}", - params.damage_manipulation_rescale_length_3p != 0 ? "--rescale-length-3p=${params.damage_manipulation_rescale_length_3p}" : "", - params.damage_manipulation_rescale_length_5p != 0 ? "--rescale-length-5p=${params.damage_manipulation_rescale_length_5p}" : "", - { meta.strandedness } == "single" ? '--single-stranded' : '' - ].join(' ').trim() } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { + [ + "--rescale", + "--seq-length=${params.damage_manipulation_rescale_seqlength}", + params.damage_manipulation_rescale_length_3p != 0 ? "--rescale-length-3p=${params.damage_manipulation_rescale_length_3p}" : "", + params.damage_manipulation_rescale_length_5p != 0 ? "--rescale-length-5p=${params.damage_manipulation_rescale_length_5p}" : "", + { meta.strandedness } == "single" ? '--single-stranded' : '', + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_rescaled" } publishDir = [ [ - // data path: { "${params.outdir}/damage_manipulation/mapdamage2/data/" }, mode: params.publish_dir_mode, pattern: 'result*/*.rescaled.bam', - saveAs: { "${meta.sample_id}_${meta.library_id}_${meta.reference}_rescaled.bam" } // Needed to save the bam directly in the output dir instead of within the mapdamage results dir. + saveAs: { "${meta.sample_id}_${meta.library_id}_${meta.reference}_rescaled.bam" }, ], [ - // stats path: { "${params.outdir}/damage_manipulation/mapdamage2/stats/" }, mode: params.publish_dir_mode, - pattern: 'results_*/Stats_out_MCMC_*' - ] + pattern: 'results_*/Stats_out_MCMC_*', + ], ] } withName: SAMTOOLS_INDEX_DAMAGE_RESCALED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } publishDir = [ [ - // stats path: { "${params.outdir}/damage_manipulation/mapdamage2/data/" }, mode: params.publish_dir_mode, pattern: '*.{bai,csi}', - saveAs: { "${meta.sample_id}_${meta.library_id}_${meta.reference}_rescaled.bam.bai" } // ext.prefix cannot be used here, so rename for publishing instead. + saveAs: { "${meta.sample_id}_${meta.library_id}_${meta.reference}_rescaled.bam.bai" }, ] ] } withName: PMDTOOLS_FILTER { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args2 = {[ - "${meta.damage_treatment}" == 'none' ? '--UDGminus' : "${meta.damage_treatment}" == 'half' ? '--UDGhalf' : '--UDGplus' , - "${meta.strandedness}" == 'single' ? '--ss' : '' - ].join(' ').trim()} - ext.args3 = { "-h" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args2 = { + [ + "${meta.damage_treatment}" == 'none' ? '--UDGminus' : "${meta.damage_treatment}" == 'half' ? '--UDGhalf' : '--UDGplus', + "${meta.strandedness}" == 'single' ? '--ss' : '', + ].join(' ').trim() + } + ext.args3 = { "-h" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_pmdfiltered" } publishDir = [ [ - // data path: { "${params.outdir}/damage_manipulation/pmdtools/data/" }, mode: params.publish_dir_mode, - pattern: '*_pmdfiltered.bam' + pattern: '*_pmdfiltered.bam', ] ] } withName: SAMTOOLS_INDEX_DAMAGE_FILTERED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } publishDir = [ [ - // data path: { "${params.outdir}/damage_manipulation/pmdtools/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] ] } withName: SAMTOOLS_FLAGSTAT_DAMAGE_FILTERED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_pmdfiltered" } publishDir = [ [ - // stats path: { "${params.outdir}/damage_manipulation/pmdtools/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] ] } withName: BAMUTIL_TRIMBAM { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = [ + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = [ params.damage_manipulation_bamutils_softclip ? '-c' : '' ].join(' ').trim() ext.prefix = { params.run_pmd_filtering ? "${meta.sample_id}_${meta.library_id}_${meta.reference}_pmdfiltered_trimmed" : "${meta.sample_id}_${meta.library_id}_${meta.reference}_trimmed" } publishDir = [ [ - // data path: { "${params.outdir}/damage_manipulation/bamutils_trimbam/data/" }, mode: params.publish_dir_mode, - pattern: '*_trimmed.bam' + pattern: '*_trimmed.bam', ] ] } withName: SAMTOOLS_INDEX_DAMAGE_TRIMMED { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } publishDir = [ [ - // data path: { "${params.outdir}/damage_manipulation/bamutils_trimbam/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] ] } @@ -1324,55 +1270,50 @@ process { // METAGENOMIC SCREENING // withName: PRINSEQPLUSPLUS { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = [ - params.metagenomics_prinseq_mode == 'dust' ? "-lc_dust=${params.metagenomics_prinseq_dustscore}" : "-lc_entropy=${params.metagenomics_complexity_entropy}", - "-trim_qual_left=0 -trim_qual_left=0 -trim_qual_window=0 -trim_qual_step=0", - ].join(' ').trim() + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = [ + params.metagenomics_prinseq_mode == 'dust' ? "-lc_dust=${params.metagenomics_prinseq_dustscore}" : "-lc_entropy=${params.metagenomics_complexity_entropy}", + "-trim_qual_left=0 -trim_qual_left=0 -trim_qual_window=0 -trim_qual_step=0", + ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_complexity" } publishDir = [ [ - // data path: { "${params.outdir}/metagenomics/prinseq/data/" }, mode: params.publish_dir_mode, pattern: '*{_good_out.fastq.gz,_good_out_R1.fastq.gz,_good_out_R2.fastq.gz}', - enabled: params.metagenomics_complexity_savefastq + enabled: params.metagenomics_complexity_savefastq, ], [ - // stats path: { "${params.outdir}/metagenomics/prinseq/stats/" }, mode: params.publish_dir_mode, pattern: '*log', - enabled: params.metagenomics_complexity_savefastq - ] + enabled: params.metagenomics_complexity_savefastq, + ], ] } withName: BBMAP_BBDUK { - tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } - ext.args = { "entropymask=f entropy=${params.metagenomics_complexity_entropy}" } + tag = { "${meta.reference}|${meta.sample_id}_${meta.library_id}" } + ext.args = { "entropymask=f entropy=${params.metagenomics_complexity_entropy}" } ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}_complexity" } publishDir = [ [ - // data path: { "${params.outdir}/metagenomics/bbduk/data/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', - enabled: params.metagenomics_complexity_savefastq + enabled: params.metagenomics_complexity_savefastq, ], [ - // stats path: { "${params.outdir}/metagenomics/bbduk/stats/" }, mode: params.publish_dir_mode, pattern: '*.log', - enabled: params.metagenomics_complexity_savefastq - ] + enabled: params.metagenomics_complexity_savefastq, + ], ] } withName: MALT_RUN { - // TODO needs a tag - ext.args = [ + ext.args = [ "-m ${params.metagenomics_malt_mode}", "-at ${params.metagenomics_malt_alignmentmode}", "-top ${params.metagenomics_malt_toppercent}", @@ -1380,34 +1321,30 @@ process { "-mq ${params.metagenomics_malt_maxqueries}", "--memoryMode ${params.metagenomics_malt_memorymode}", params.metagenomics_malt_minsupportmode == "percent" ? "-supp ${params.metagenomics_malt_minsupportpercent}" : "-sup ${params.metagenomics_malt_minsupportreads}", - params.metagenomics_malt_savereads ? "--alignments ./" : "" + params.metagenomics_malt_savereads ? "--alignments ./" : "", ].join(' ').trim() ext.prefix = { "${meta.label}_${meta.id}-run" } publishDir = [ [ - // data path: { "${params.outdir}/metagenomics/malt/data/" }, mode: params.publish_dir_mode, - pattern: '*.{rma6,sam.gz}' + pattern: '*.{rma6,sam.gz}', ], [ - // stats path: { "${params.outdir}/metagenomics/malt/stats/" }, mode: params.publish_dir_mode, - pattern: '*.log' - ] + pattern: '*.log', + ], ] } withName: CAT_CAT_MALT { - // TODO needs a tag ext.prefix = { "${meta.id}_runtime_log_concatenated.log" } publishDir = [ [ - // stats path: { "${params.outdir}/metagenomics/malt/stats/" }, mode: params.publish_dir_mode, - pattern: '*.log' + pattern: '*.log', ] ] } @@ -1419,40 +1356,36 @@ process { } withName: KRAKEN2_KRAKEN2 { - ext.args = [ + ext.args = [ params.metagenomics_kraken2_saveminimizers ? "--report-minimizer-data" : "" ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/metagenomics/kraken2/data/" }, mode: params.publish_dir_mode, - pattern: '*.fastq.gz' + pattern: '*.fastq.gz', ], [ - // stats path: { "${params.outdir}/metagenomics/kraken2/stats/" }, mode: params.publish_dir_mode, - pattern: '*.txt' - ] + pattern: '*.txt', + ], ] } withName: KRAKENUNIQ_PRELOADEDKRAKENUNIQ { publishDir = [ [ - // data path: { "${params.outdir}/metagenomics/krakenuniq/data/" }, mode: params.publish_dir_mode, - pattern: '*.fastq.gz' + pattern: '*.fastq.gz', ], [ - // stats path: { "${params.outdir}/metagenomics/krakenuniq/stats/" }, mode: params.publish_dir_mode, - pattern: '*.txt' - ] + pattern: '*.txt', + ], ] } @@ -1460,17 +1393,15 @@ process { ext.prefix = { "${meta.sample_id}_${meta.library_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/metagenomics/metaphlan/stats/" }, mode: params.publish_dir_mode, - pattern: '*.{biom,txt}' + pattern: '*.{biom,txt}', ] ] } withName: MALTEXTRACT { - // TODO needs a tag - ext.args = [ + ext.args = [ "-f ${params.metagenomics_maltextract_filter}", "-a ${params.metagenomics_maltextract_toppercent}", "--minPI ${params.metagenomics_maltextract_minpercentidentity}", @@ -1479,63 +1410,59 @@ process { params.metagenomics_maltextract_duplicateremovaloff ? "--dupRemOff" : "", params.metagenomics_maltextract_matches ? "--matches" : "", params.metagenomics_maltextract_megansummary ? "--meganSummary" : "", - params.metagenomics_maltextract_usetopalignment ? "--useTopAlignment" : "", + params.metagenomics_maltextract_usetopalignment ? "--useTopAlignment" : "", { meta.strandedness } == "single" ? '--singleStranded' : '', ].join(' ').trim() publishDir = [ [ - // stats path: { "${params.outdir}/metagenomics/maltextract/stats/" }, mode: params.publish_dir_mode, pattern: 'results', - saveAs: { "${meta.id}" } + saveAs: { "${meta.id}" }, ] ] } withName: MEGAN_RMA2INFO { - tag = {"${meta.id}"} - ext.args = "-c2c Taxonomy" + tag = { "${meta.id}" } + ext.args = "-c2c Taxonomy" ext.prefix = { "${meta.id}" } publishDir = [ [ - // stats path: { "${params.outdir}/metagenomics/megan_summaries/stats/" }, mode: params.publish_dir_mode, - pattern: '*.{txt.gz,megan}' + pattern: '*.{txt.gz,megan}', ] ] } withName: AMPS { - publishDir = [ + publishDir = [ path: { "${params.outdir}/metagenomics/amps/stats/" }, mode: params.publish_dir_mode, - pattern: 'results' + pattern: 'results', ] - errorStrategy = 'ignore' // required as it fails the run for low reads: https://github.com/rhuebler/HOPS/issues/9 + errorStrategy = 'ignore' } withName: TAXPASTA_MERGE { - ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}_taxpasta_table.tsv" } + ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}_taxpasta_table.tsv" } publishDir = [ [ - // stats path: { "${params.outdir}/metagenomics/taxpasta/stats/" }, mode: params.publish_dir_mode, - pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}' + pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}', ] ] } withName: TAXPASTA_STANDARDISE { - ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}taxpasta_table.tsv" } + ext.args = { "--profiler ${meta.profiler} --output ${meta.profiler}taxpasta_table.tsv" } publishDir = [ [ - // stats path: { "${params.outdir}/metagenomics/taxpasta/stats/" }, mode: params.publish_dir_mode, - pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}' + pattern: '*.{csv,tsv,ods,xlsx,arrow,parquet,biom}', ] ] } @@ -1543,98 +1470,92 @@ process { // // LIBRARY MERGE // - withName: ".*MERGE_LIBRARIES:SAMTOOLS_MERGE_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } + withName: '.*MERGE_LIBRARIES:SAMTOOLS_MERGE_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}_unsorted" } publishDir = [ enabled: false ] } - withName: ".*MERGE_LIBRARIES:SAMTOOLS_SORT_MERGED_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } + withName: '.*MERGE_LIBRARIES:SAMTOOLS_SORT_MERGED_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/final_bams/raw/data/" }, mode: params.publish_dir_mode, - pattern: '*.bam' + pattern: '*.bam', ] ] } - withName: ".*MERGE_LIBRARIES:SAMTOOLS_INDEX_MERGED_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + withName: '.*MERGE_LIBRARIES:SAMTOOLS_INDEX_MERGED_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/final_bams/raw/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] ] } - withName: ".*MERGE_LIBRARIES:SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } + withName: '.*MERGE_LIBRARIES:SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/final_bams/raw/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] ] } - withName: ".*MERGE_LIBRARIES:SAMTOOLS_MERGE_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } + withName: '.*MERGE_LIBRARIES:SAMTOOLS_MERGE_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}_unsorted" } publishDir = [ enabled: false ] } - withName: ".*MERGE_LIBRARIES_GENOTYPING:SAMTOOLS_SORT_MERGED_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } + withName: '.*MERGE_LIBRARIES_GENOTYPING:SAMTOOLS_SORT_MERGED_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/final_bams/${params.genotyping_source}/data/" }, mode: params.publish_dir_mode, - pattern: '*.bam' + pattern: '*.bam', ] ] } - withName: ".*MERGE_LIBRARIES_GENOTYPING:SAMTOOLS_INDEX_MERGED_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = { params.fasta_largeref ? "-c" : "" } + withName: '.*MERGE_LIBRARIES_GENOTYPING:SAMTOOLS_INDEX_MERGED_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = { params.fasta_largeref ? "-c" : "" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/final_bams/${params.genotyping_source}/data/" }, mode: params.publish_dir_mode, - pattern: '*.{bai,csi}' + pattern: '*.{bai,csi}', ] ] } - withName: ".*MERGE_LIBRARIES_GENOTYPING:SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES" { - tag = { "${meta.reference}|${meta.sample_id}" } + withName: '.*MERGE_LIBRARIES_GENOTYPING:SAMTOOLS_FLAGSTAT_MERGED_LIBRARIES' { + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/final_bams/${params.genotyping_source}/stats/" }, mode: params.publish_dir_mode, - pattern: '*.flagstat' + pattern: '*.flagstat', ] ] } @@ -1643,8 +1564,8 @@ process { // GENOTYPING // withName: SAMTOOLS_MPILEUP_PILEUPCALLER { - tag = { "${meta.reference}|${meta.strandedness}" } - ext.args = [ + tag = { "${meta.reference}|${meta.strandedness}" } + ext.args = [ "-B", "-q ${params.genotyping_pileupcaller_min_base_quality}", "-Q ${params.genotyping_pileupcaller_min_map_quality}", @@ -1656,26 +1577,28 @@ process { } withName: SEQUENCETOOLS_PILEUPCALLER { - tag = { "${meta.reference}|${meta.strandedness}" } - ext.args = {[ - "--${params.genotyping_pileupcaller_method}", - params.genotyping_pileupcaller_transitions_mode == "SkipTransitions" ? "--skipTransitions" : params.genotyping_pileupcaller_transitions_mode == "TransitionsMissing" ? "--transitionsMissing" : "", - "${meta.strandedness}" == 'single' ? "--singleStrandMode" : "" , - "--sampleNames", meta.sample_id.join(","), - "-e pileupcaller.${meta.strandedness}.${meta.reference}" - ].join(' ').trim() } + tag = { "${meta.reference}|${meta.strandedness}" } + ext.args = { + [ + "--${params.genotyping_pileupcaller_method}", + params.genotyping_pileupcaller_transitions_mode == "SkipTransitions" ? "--skipTransitions" : params.genotyping_pileupcaller_transitions_mode == "TransitionsMissing" ? "--transitionsMissing" : "", + "${meta.strandedness}" == 'single' ? "--singleStrandMode" : "", + "--sampleNames", + meta.sample_id.join(","), + "-e pileupcaller.${meta.strandedness}.${meta.reference}", + ].join(' ').trim() + } ext.prefix = { "${meta.strandedness}_${meta.reference}" } publishDir = [ - enabled: false // Not published because the output goes through COLLECT_GENOTYPES + enabled: false ] } withName: COLLECT_GENOTYPES { - tag = { "${meta.reference}" } + tag = { "${meta.reference}" } ext.prefix = { "pileupcaller_genotypes_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/pileupcaller/data/" }, mode: params.publish_dir_mode, pattern: '*.{geno,snp,ind}', @@ -1684,12 +1607,11 @@ process { } withName: EIGENSTRATDATABASETOOLS_EIGENSTRATSNPCOVERAGE { - tag = { "${meta.reference}" } - ext.args = { "-j ${prefix}.json" } + tag = { "${meta.reference}" } + ext.args = { "-j ${prefix}.json" } ext.prefix = { "pileupcaller_genotypes_${meta.reference}_coverage" } publishDir = [ [ - // stats path: { "${params.outdir}/genotyping/pileupcaller/stats/" }, mode: params.publish_dir_mode, pattern: '*.tsv', @@ -1698,9 +1620,9 @@ process { } withName: GATK_REALIGNERTARGETCREATOR { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = [ - params.genotyping_gatk_ug_defaultbasequalities > 0 ? "--defaultBaseQualities ${params.genotyping_gatk_ug_defaultbasequalities}" : "", // Empty string since GATK complains if its default of -1 is provided. + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = [ + params.genotyping_gatk_ug_defaultbasequalities > 0 ? "--defaultBaseQualities ${params.genotyping_gatk_ug_defaultbasequalities}" : "" ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.reference}_realigntarget" } publishDir = [ @@ -1709,14 +1631,13 @@ process { } withName: GATK_INDELREALIGNER { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = [ - params.genotyping_gatk_ug_defaultbasequalities > 0 ? "--defaultBaseQualities ${params.genotyping_gatk_ug_defaultbasequalities}" : "", // Empty string since GATK complains if its default of -1 is provided. + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = [ + params.genotyping_gatk_ug_defaultbasequalities > 0 ? "--defaultBaseQualities ${params.genotyping_gatk_ug_defaultbasequalities}" : "" ].join(' ').trim() ext.prefix = { "${meta.sample_id}_${meta.reference}_realigned" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/gatk_ug/data/" }, mode: params.publish_dir_mode, pattern: '*.{bam,bai}', @@ -1726,19 +1647,20 @@ process { } withName: GATK_UNIFIEDGENOTYPER { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = {[ - "--sample_ploidy ${meta2.ploidy}", - "-stand_call_conf ${params.genotyping_gatk_call_conf}", - "-dcov ${params.genotyping_gatk_ug_downsample}", - "--output_mode ${params.genotyping_gatk_ug_out_mode}", - "--genotype_likelihoods_model ${params.genotyping_gatk_ug_genotype_mode}", - params.genotyping_gatk_ug_defaultbasequalities > 0 ? "--defaultBaseQualities ${params.genotyping_gatk_ug_defaultbasequalities}" : "", // Empty string since GATK complains if its default of -1 is provided. - ].join(' ').trim() } + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = { + [ + meta2.ploidy ? "--sample_ploidy ${meta2.ploidy}" : "--sample_ploidy 2", + "-stand_call_conf ${params.genotyping_gatk_call_conf}", + "-dcov ${params.genotyping_gatk_ug_downsample}", + "--output_mode ${params.genotyping_gatk_ug_out_mode}", + "--genotype_likelihoods_model ${params.genotyping_gatk_ug_genotype_mode}", + params.genotyping_gatk_ug_defaultbasequalities > 0 ? "--defaultBaseQualities ${params.genotyping_gatk_ug_defaultbasequalities}" : "", + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/gatk_ug/data/" }, mode: params.publish_dir_mode, pattern: '*.vcf.gz', @@ -1747,12 +1669,11 @@ process { } withName: BCFTOOLS_INDEX_UG { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = "--tbi" //tbi indices for consistency with GATK HC + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = "--tbi" ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/gatk_ug/data/" }, mode: params.publish_dir_mode, pattern: '*.vcf.gz.tbi', @@ -1761,18 +1682,18 @@ process { } withName: GATK4_HAPLOTYPECALLER { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = {[ - // Option names have changed from underscore_separated to hyphen-separated in GATK4 - "--sample-ploidy ${meta2.ploidy}", - "-stand-call-conf ${params.genotyping_gatk_call_conf}", - "--output-mode ${params.genotyping_gatk_hc_out_mode}", - "--emit-ref-confidence ${params.genotyping_gatk_hc_emitrefconf}", - ].join(' ').trim() } + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = { + [ + meta2.ploidy ? "--sample-ploidy ${meta2.ploidy}" : "--sample-ploidy 2", + "-stand-call-conf ${params.genotyping_gatk_call_conf}", + "--output-mode ${params.genotyping_gatk_hc_out_mode}", + "--emit-ref-confidence ${params.genotyping_gatk_hc_emitrefconf}", + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/gatk_hc/data/" }, mode: params.publish_dir_mode, pattern: '*.{vcf.gz,vcf.gz.tbi}', @@ -1781,16 +1702,17 @@ process { } withName: FREEBAYES { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = {[ - "-p ${ref_meta.ploidy}", - "-C ${params.genotyping_freebayes_min_alternate_count}", - params.genotyping_freebayes_skip_coverage != 0 ? "-g ${params.genotyping_freebayes_skip_coverage}" : "", - ].join(' ').trim() } + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = { + [ + ref_meta.ploidy ? "-p ${ref_meta.ploidy}" : '', + "-C ${params.genotyping_freebayes_min_alternate_count}", + params.genotyping_freebayes_skip_coverage != 0 ? "-g ${params.genotyping_freebayes_skip_coverage}" : "", + ].join(' ').trim() + } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/freebayes/data/" }, mode: params.publish_dir_mode, pattern: '*.vcf.gz', @@ -1799,12 +1721,11 @@ process { } withName: BCFTOOLS_INDEX_FREEBAYES { - tag = { "${meta.reference}|${meta.sample_id}" } - ext.args = "--tbi" //tbi indices for consistency with GATK HC + tag = { "${meta.reference}|${meta.sample_id}" } + ext.args = "--tbi" ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/freebayes/data/" }, mode: params.publish_dir_mode, pattern: '*.vcf.gz.tbi', @@ -1813,11 +1734,10 @@ process { } withName: BCFTOOLS_STATS_GENOTYPING { - tag = { "${meta.reference}|${meta.sample_id}" } + tag = { "${meta.reference}|${meta.sample_id}" } ext.prefix = { "${meta.sample_id}_${meta.reference}" } publishDir = [ [ - // stats path: { "${params.outdir}/genotyping/bcftools/stats/" }, mode: params.publish_dir_mode, pattern: '*.txt', @@ -1826,12 +1746,12 @@ process { } withName: ANGSD_GL { - tag = { "${meta.reference}" } - ext.args = { + tag = { "${meta.reference}" } + ext.args = { gl_model = params.genotyping_angsd_glmodel == 'samtools' ? 1 : params.genotyping_angsd_glmodel == 'gatk' ? 2 : params.genotyping_angsd_glmodel == 'soapsnp' ? 3 : 4 gl_format = params.genotyping_angsd_glformat == 'binary' ? 1 : params.genotyping_angsd_glformat == 'beagle_binary' ? 2 : params.genotyping_angsd_glformat == 'binary_three' ? 3 : 4 [ - ( gl_format == 2 || gl_format == 3 ) ? '-doMajorMinor 1': '', + gl_format == 2 || gl_format == 3 ? '-doMajorMinor 1' : '', "-GL ${gl_model}", "-doGlf ${gl_format}", ].join(' ').trim() @@ -1839,7 +1759,6 @@ process { ext.prefix = { "angsd_${meta.reference}" } publishDir = [ [ - // data path: { "${params.outdir}/genotyping/angsd/data/" }, mode: params.publish_dir_mode, pattern: '*.{glf,beagle}.gz', diff --git a/conf/test.config b/conf/test.config index e358134ad..81ec0bb9b 100644 --- a/conf/test.config +++ b/conf/test.config @@ -19,30 +19,47 @@ process { } params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' + input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' + fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' + + // Preprocessing + preprocessing_tool = 'adapterremoval' // Sharding FASTQ - run_fastq_sharding = true - fastq_shard_size = 5000 + run_fastq_sharding = true + fastq_shard_size = 5000 + + // Mapping + mapping_tool = 'bwaaln' + skip_qualimap = false // BAM filtering - run_bamfiltering = true - bamfiltering_minreadlength = 30 - bamfiltering_mappingquality = 37 + run_bamfiltering = true + bamfiltering_minreadlength = 30 + bamfiltering_mappingquality = 37 + deduplication_tool = 'markduplicates' + + // PreSeq + mapstats_preseq_mode = 'c_curve' + + // Damage calculation + damagecalculation_tool = 'damageprofiler' + skip_qualimap = false - // Map Stats - run_bedtools_coverage = true - mapstats_bedtools_featurefile = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.gff3' + // Genotyping + run_genotyping = true + genotyping_source = 'raw' + genotyping_tool = 'ug' // Metagenomic screening - run_metagenomics = false + run_metagenomics = true + metagenomics_profiling_tool = 'metaphlan' + metagenomics_profiling_database = params.pipelines_testdata_base_path + 'eager/databases/metaphlan/metaphlan4_database.tar.gz' + metagenomics_run_postprocessing = true } diff --git a/conf/test_humanbam.config b/conf/test_humanbam.config deleted file mode 100644 index 21c35179f..000000000 --- a/conf/test_humanbam.config +++ /dev/null @@ -1,55 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test. - - Use as follows: - nextflow run nf-core/eager -profile test_tsv_humanbam, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - -params { - config_profile_name = 'Human BAM test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'eager/testdata/Human/human_design_bam_eager3.tsv' - - // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Human/hs37d5_chr21-MT.fa.gz' - - // Contamination estimation - contamination_estimation_angsd_mapq = 0 - contamination_estimation_angsd_minq = 0 - - // Qualimap - snpcapture_bed = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K.pos.list_hs37d5.0based.bed.gz' - - // TODO Reactivate sexDet and genotyping params when those steps get implemented. - // //Sex Determination - sexdeterrmine_bedfile = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K.pos.list_hs37d5.0based.bed.gz' - // // Genotyping - genotyping_pileupcaller_bedfile = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K.pos.list_hs37d5.0based.bed.gz' - genotyping_pileupcaller_snpfile = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K_covered_in_JK2067_downsampled_s0.1.numeric_chromosomes.snp' - - - // BAM filtering - run_bamfiltering = true - bamfiltering_minreadlength = 30 - bamfiltering_mappingquality = 37 - - // Metagenomic screening - run_metagenomics = false -} diff --git a/conf/test_humanpopgen.config b/conf/test_humanpopgen.config new file mode 100644 index 000000000..11605769a --- /dev/null +++ b/conf/test_humanpopgen.config @@ -0,0 +1,70 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/eager -profile test_humanpopgen, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h', + ] + + // To avoid pipeline failure due to not having X reads and to not have overcrowded datasets in the test + withName: ANGSD_CONTAMINATION { + errorStrategy = { task.exitStatus in [134] ? 'ignore' : 'finish' } + } +} + +params { + config_profile_name = 'Test human popgen profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'eager/testdata/Human/human_design_bam_eager3.tsv' + + // Genome references + fasta = params.pipelines_testdata_base_path + 'eager/reference/Human/hs37d5_chr21-MT.fa.gz' + + // Mapping + mapping_tool = 'bowtie2' + convert_inputbam = true + + // BAM filtering + run_bamfiltering = true + bamfiltering_minreadlength = 30 + bamfiltering_mappingquality = 37 + + // Damage + damagecalculation_tool = 'mapdamage' + run_trim_bam = true + + // Contamination + run_mtnucratio = true + run_contamination_estimation_angsd = true + + // Genotyping + genotyping_tool = 'pileupcaller' + run_genotyping = true + genotyping_source = 'trimmed' + genotyping_pileupcaller_bedfile = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K.pos.list_hs37d5.0based.bed.gz' + genotyping_pileupcaller_snpfile = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K_covered_in_JK2067_downsampled_s0.1.numeric_chromosomes.snp' + + //Sex Determination + run_sexdeterrmine = true + sexdeterrmine_bedfile = params.pipelines_testdata_base_path + 'eager/reference/Human/1240K.pos.list_hs37d5.0based.bed.gz' + + // Metagenomics + run_metagenomics = true + metagenomics_complexity_tool = 'prinseq' + metagenomics_profiling_tool = 'kraken2' + metagenomics_profiling_database = params.pipelines_testdata_base_path + 'eager/databases/kraken/eager_test.tar.gz' + metagenomics_run_postprocessing = true +} diff --git a/conf/test_kraken2.config b/conf/test_kraken2.config deleted file mode 100644 index b976d1797..000000000 --- a/conf/test_kraken2.config +++ /dev/null @@ -1,35 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test for - metagenomics krakenuniq. - - Use as follows: - nextflow run nf-core/eager -profile test_krakenuniq, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} -params { - config_profile_name = 'Kraken2 test profile' - config_profile_description = 'Minimal test dataset to check the metagenomics kraken2 pipeline function' - - // Input data - input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' - - // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' - - // Metagenomics - run_metagenomics = true - metagenomics_profiling_tool = 'kraken2' - metagenomics_profiling_database = params.pipelines_testdata_base_path + 'eager/databases/kraken/eager_test.tar.gz' -} diff --git a/conf/test_krakenuniq.config b/conf/test_krakenuniq.config deleted file mode 100644 index b79bdd9df..000000000 --- a/conf/test_krakenuniq.config +++ /dev/null @@ -1,36 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test for - metagenomics krakenuniq. - - Use as follows: - nextflow run nf-core/eager -profile test_krakenuniq, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - -params { - config_profile_name = 'KrakenUniq test profile' - config_profile_description = 'Minimal test dataset to check the metagenomics krakenuniq pipeline function' - - // Input data - input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' - - // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' - - // Metagenomics - run_metagenomics = true - metagenomics_profiling_tool = 'krakenuniq' - metagenomics_profiling_database = params.pipelines_testdata_base_path + 'eager/databases/krakenuniq/eager3-mammoth-minimal.tar.gz' -} diff --git a/conf/test_long.config b/conf/test_long.config new file mode 100644 index 000000000..66e4dcf37 --- /dev/null +++ b/conf/test_long.config @@ -0,0 +1,28 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/eager -profile test_nothing, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '3.h', + ] +} + +includeConfig 'test_minimal.config' + +params { + config_profile_name = 'Test long profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + run_mapdamage_rescaling = true +} diff --git a/conf/test_malt.config b/conf/test_malt.config deleted file mode 100644 index 43b905cc9..000000000 --- a/conf/test_malt.config +++ /dev/null @@ -1,36 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test for - metagenomics malt. - - Use as follows: - nextflow run nf-core/eager -profile test_malt, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - -params { - config_profile_name = 'MALT test profile' - config_profile_description = 'Minimal test dataset to check the metagenomics MALT pipeline function' - - // Input data - input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' - - // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' - - // Metagenomics - run_metagenomics = true - metagenomics_profiling_tool = 'malt' - metagenomics_profiling_database = params.pipelines_testdata_base_path + '/eager/databases/malt/eager_test.tar.gz' -} diff --git a/conf/test_metaphlan.config b/conf/test_metaphlan.config deleted file mode 100644 index 2b255240c..000000000 --- a/conf/test_metaphlan.config +++ /dev/null @@ -1,37 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test for - metagenomics krakenuniq. - - Use as follows: - nextflow run nf-core/eager -profile test_krakenuniq, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - -params { - config_profile_name = 'MetaPhlAn4 test profile' - config_profile_description = 'Minimal test dataset to check the metagenomics metaphlan4 pipeline function' - - // Input data - input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3_TOYMETAPHLAN.csv' - - // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' - - // Metagenomics - run_metagenomics = true - metagenomics_profiling_tool = 'metaphlan' - metagenomics_profiling_database = params.pipelines_testdata_base_path + 'eager/databases/metaphlan/metaphlan4_database.tar.gz' - metagenomics_run_postprocessing = true -} diff --git a/conf/test_microbial.config b/conf/test_microbial.config new file mode 100644 index 000000000..3ec47b4fd --- /dev/null +++ b/conf/test_microbial.config @@ -0,0 +1,62 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/eager -profile test_microbial, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h', + ] +} + +params { + config_profile_name = 'Test microbial profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_PE_only_v3.tsv' + + // Genome references + fasta_sheet = params.pipelines_testdata_base_path + 'eager/reference/reference_sheet_multiref.csv' + + // Host Removal + run_host_removal = true + + // Preprocessing + sequencing_qc_tool = 'falco' + preprocessing_tool = 'fastp' + preprocessing_excludeunmerged = true + + // Mapping + mapping_tool = 'circularmapper' + run_mapdamage_rescaling = false + + // BAM filtering + deduplication_tool = "dedup" + run_bamfiltering = true + bamfiltering_minreadlength = 30 + bamfiltering_mappingquality = 37 + + // Metagenomics + run_metagenomics = true + metagenomics_profiling_tool = 'krakenuniq' + metagenomics_profiling_database = params.pipelines_testdata_base_path + 'eager/databases/krakenuniq/testdb-krakenuniq.tar.gz' + run_host_removal = true + + // Bedtools coverage + run_bedtools_coverage = true + + // Genotyping + run_genotyping = true + genotyping_source = 'raw' + genotyping_tool = 'freebayes' +} diff --git a/conf/test_nothing.config b/conf/test_minimal.config similarity index 92% rename from conf/test_nothing.config rename to conf/test_minimal.config index a16745b6e..758c38f5e 100644 --- a/conf/test_nothing.config +++ b/conf/test_minimal.config @@ -14,7 +14,7 @@ process { resourceLimits = [ cpus: 4, memory: '15.GB', - time: '1.h' + time: '1.h', ] } @@ -25,10 +25,10 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'eager/testdata/Human/human_design_bam_eager3.tsv' + input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' // Genome references - fasta = params.pipelines_testdata_base_path + 'eager/reference/Human/hs37d5_chr21-MT.fa.gz' + fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' skip_preprocessing = true skip_deduplication = true diff --git a/conf/test_modern.config b/conf/test_modern.config new file mode 100644 index 000000000..e3e08904a --- /dev/null +++ b/conf/test_modern.config @@ -0,0 +1,43 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/eager -profile test_modern, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h', + ] +} + +params { + config_profile_name = 'Test modern profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/mammooth_design_bam_v3.tsv' + + // Genome references + fasta = params.pipelines_testdata_base_path + 'eager/reference/Mammoth/Mammoth_MT_Krause.fasta' + + + // Preprocessing + sequencing_qc_tool = 'falco' + convert_inputbam = false + + // Mapping + mapping_tool = 'bwamem' + + // Genotyping + run_genotyping = true + genotyping_source = 'raw' + genotyping_tool = 'hc' +} diff --git a/conf/test_multiref.config b/conf/test_multiref.config deleted file mode 100644 index 6917a1a65..000000000 --- a/conf/test_multiref.config +++ /dev/null @@ -1,39 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running minimal tests -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a fast and simple pipeline test. - - Use as follows: - fasta_sheet = 'https://github.com/nf-core/test-datasets/raw/eager/reference/reference_sheet_multiref.csv' - nextflow run nf-core/eager -profile test_multiref, --outdir - ----------------------------------------------------------------------------------------- -*/ - -process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] -} - -params { - config_profile_name = 'Test profile' - config_profile_description = 'Minimal test dataset to check pipeline function' - - // Input data - input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_multilane_multilib.tsv' - - // Genome references - fasta_sheet = params.pipelines_testdata_base_path + 'eager/reference/reference_sheet_multiref.csv' - - // BAM filtering - run_bamfiltering = true - bamfiltering_minreadlength = 30 - bamfiltering_mappingquality = 37 - - // Metagenomics - run_metagenomics = false -} diff --git a/conf/test_shortdna.config b/conf/test_shortdna.config new file mode 100644 index 000000000..7184517c2 --- /dev/null +++ b/conf/test_shortdna.config @@ -0,0 +1,59 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Nextflow config file for running minimal tests +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Defines input files and everything required to run a fast and simple pipeline test. + + Use as follows: + nextflow run nf-core/eager -profile test_shortdna, --outdir + +---------------------------------------------------------------------------------------- +*/ + +process { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] +} + +params { + config_profile_name = 'Test very short DNA profile' + config_profile_description = 'Minimal test dataset to check pipeline function' + + // Input data + input = params.pipelines_testdata_base_path + 'eager/testdata/Mammoth/samplesheet_v3.tsv' + + // Genome references + fasta_sheet = params.pipelines_testdata_base_path + 'eager/reference/reference_sheet_multiref.csv' + + // Mapping + // TO DO: Change when mapAD is there. + // mapping_tool = 'mapad' + + // Metagenomics + run_metagenomics = true + metagenomics_complexity_tool = 'bbduk' + metagenomics_profiling_tool = 'malt' + metagenomics_profiling_database = params.pipelines_testdata_base_path + '/eager/databases/malt/eager_test.tar.gz' + metagenomics_run_postprocessing = true + metagenomics_maltextract_taxonlist = params.pipelines_testdata_base_path + '/eager/testdata/Mammoth/maltextract/MaltExtract_list.txt' + metagenomics_maltextract_ncbidir = 'https://github.com/rhuebler/HOPS/raw/external/Resources/' + + // Manioulate Damage + run_pmd_filtering = true + + // Genotyping + run_genotyping = true + genotyping_source = 'pmd' + genotyping_tool = 'angsd' + + +} + +process { + withName: 'MALT_RUN' { + ext.args = "-J-Xmx12G" + } +} diff --git a/nextflow.config b/nextflow.config index 25a856117..48d87906b 100644 --- a/nextflow.config +++ b/nextflow.config @@ -390,21 +390,14 @@ profiles { ] } } - test { - includeConfig 'conf/test.config' - } - test_full { - includeConfig 'conf/test_full.config' - } - test { includeConfig 'conf/test.config' } - test_full { includeConfig 'conf/test_full.config' } - test_nothing { includeConfig 'conf/test_nothing.config' } - test_humanbam { includeConfig 'conf/test_humanbam.config' } - test_multiref { includeConfig 'conf/test_multiref.config' } - test_kraken2 { includeConfig 'conf/test_kraken2.config' } - test_malt { includeConfig 'conf/test_malt.config' } - test_krakenuniq { includeConfig 'conf/test_krakenuniq.config'} - test_metaphlan { includeConfig 'conf/test_metaphlan.config' } + test { includeConfig 'conf/test.config' } + test_full { includeConfig 'conf/test_full.config' } + test_minimal { includeConfig 'conf/test_minimal.config' } + test_modern { includeConfig 'conf/test_modern.config' } + test_microbial { includeConfig 'conf/test_microbial.config' } + test_shortdna { includeConfig 'conf/test_shortdna.config' } + test_humanpopgen { includeConfig 'conf/test_humanpopgen.config' } + test_long { includeConfig 'conf/test_long.config' } } // Load nf-core custom profiles from different Institutions diff --git a/nextflow_schema.json b/nextflow_schema.json index 3f68d5457..c69a1de19 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1170,7 +1170,7 @@ "type": "integer", "default": 2, "description": "Specify the ploidy of the reference organism.", - "help_text": "Specify the desired ploidy value of your reference organism for genotyping with GATK or FreeBayes. E.g. if you want to allow heterozygous calls this value should be >= 2.\n\n> Modifies GATK UnifiedGenotyper parameter: `--sample_ploidy`\n> Modifies GATK HaplotypeCaller parameter: `--sample-ploidy`\n> Modifies FreeBayes parameter: `-p`", + "help_text": "Specify the desired ploidy value of your reference organism for genotyping with GATK or FreeBayes. E.g. if you want to allow heterozygous calls this value should be >= 2.\n\n> Modifies GATK UnifiedGenotyper parameter: `--sample_ploidy`\n> Modifies GATK HaplotypeCaller parameter: `--sample_ploidy`\n> Modifies FreeBayes parameter: `-p`", "fa_icon": "fas fa-pastafarianism" }, "genotyping_pileupcaller_min_base_quality": { diff --git a/subworkflows/local/genotype.nf b/subworkflows/local/genotype.nf index a674bf85f..fc5a723bc 100644 --- a/subworkflows/local/genotype.nf +++ b/subworkflows/local/genotype.nf @@ -393,17 +393,17 @@ workflow GENOTYPE { addNewMetaFromAttributes( it, "id" , "reference" , false ) } // RESULT: [ [combination_meta], [ref_meta], fasta, fai, dict, dbsnp ] + // TO DO: Module fails if we don't give the fai but the fasta. However is not specified atm. Re-add fasta once this issue is solved. ch_input_for_angsd = ch_bams_for_multimap .combine( ch_fasta_for_multimap , by:0 ) .multiMap { ignore_me, meta, bam, bai, ref_meta, fasta, fai, dict, dbsnp -> bam: [ meta, bam ] - fasta: [ ref_meta, fasta ] } ANGSD_GL( ch_input_for_angsd.bam, - ch_input_for_angsd.fasta, + [[], []], // No fasta file [[], []], // No errors file ) ch_angsd_genotype_likelihoods = ANGSD_GL.out.genotype_likelihood diff --git a/subworkflows/local/utils_nfcore_eager_pipeline/main.nf b/subworkflows/local/utils_nfcore_eager_pipeline/main.nf index a92c8f89c..945f16d24 100644 --- a/subworkflows/local/utils_nfcore_eager_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_eager_pipeline/main.nf @@ -211,7 +211,7 @@ def validateInputParameters() { if ( !params.fasta && !params.fasta_sheet ) { exit 1, "[nf-core/eager] ERROR: Neither FASTA file --fasta nor reference sheet --fasta_sheet have been provided."} if ( params.fasta && params.fasta_sheet ) { exit 1, "[nf-core/eager] ERROR: A FASTA file --fasta and a reference sheet --fasta_sheet have been provided. These parameters are mutually exclusive."} if ( params.preprocessing_adapterlist && params.preprocessing_skipadaptertrim ) { log.warn("[nf-core/eager] WARNING: --preprocessing_skipadaptertrim will override --preprocessing_adapterlist. Adapter trimming will be skipped!") } - if ( params.deduplication_tool == 'dedup' && ! params.preprocessing_excludeunmerged ) { exit 1, "[nf-core/eager] ERROR: Dedup can only be used on collapsed (i.e. merged) PE reads. For all other cases, please set --deduplication_tool to 'markduplicates'."} + if ( params.deduplication_tool == 'dedup' && ! params.preprocessing_excludeunmerged ) { exit 1, "[nf-core/eager] ERROR: Dedup can only be used on collapsed (i.e. merged) PE reads without singletons. If you want to use Dedup, please provide --preprocessing_excludeunmerged. For all other cases, please set --deduplication_tool to 'markduplicates'."} if ( params.bamfiltering_retainunmappedgenomicbam && params.bamfiltering_mappingquality > 0 ) { exit 1, ("[nf-core/eager] ERROR: You cannot both retain unmapped reads and perform quality filtering, as unmapped reads have a mapping quality of 0. Pick one or the other functionality.") } if ( params.bamfiltering_generatefastq && params.run_bamfiltering ) { exit 1, ("[nf-core/eager] ERROR: --bamfiltering_generatefastq will NOT generate a fastq file unless BAM filtering is turned on with `--run_bamfiltering`") } if ( params.genotyping_source == 'trimmed' && ! params.run_trim_bam ) { exit 1, ("[nf-core/eager] ERROR: --genotyping_source cannot be 'trimmed' unless BAM trimming is turned on with `--run_trim_bam`.") } diff --git a/workflows/eager.nf b/workflows/eager.nf index f379b8df1..148f262c1 100644 --- a/workflows/eager.nf +++ b/workflows/eager.nf @@ -434,9 +434,9 @@ workflow EAGER { ch_versions = ch_versions.mix(PRESEQ_CCURVE.out.versions) } else if (!params.mapstats_skip_preseq && params.mapstats_preseq_mode == 'lc_extrap') { - PRESEQ_LCEXTRAP(ch_reads_for_deduplication.map { [it[0], it[1]] }) - ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.lc_extrap.collect { it[1] }.ifEmpty([])) - ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions) + PRESEQ_LCEXTRAP(ch_reads_for_deduplication.map { [it[0], it[1]] }) + ch_multiqc_files = ch_multiqc_files.mix(PRESEQ_LCEXTRAP.out.lc_extrap.collect { it[1] }.ifEmpty([])) + ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions) } // @@ -553,7 +553,7 @@ workflow EAGER { ch_bams_for_genotyping, ch_reference_for_genotyping, REFERENCE_INDEXING.out.pileupcaller_bed_snp.ifEmpty([[], [], []]), - REFERENCE_INDEXING.out.dbsnp.ifEmpty([[], []]) + REFERENCE_INDEXING.out.dbsnp.ifEmpty([[], []]), ) ch_versions = ch_versions.mix(GENOTYPE.out.versions) @@ -566,9 +566,9 @@ workflow EAGER { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'nf_core_' + 'eager_software_' + 'mqc_' + 'versions.yml', + name: 'nf_core_' + 'eager_software_' + 'mqc_' + 'versions.yml', sort: true, - newLine: true + newLine: true, ) .set { ch_collated_versions } @@ -606,7 +606,7 @@ workflow EAGER { ch_multiqc_files = ch_multiqc_files.mix( ch_methods_description.collectFile( name: 'methods_description_mqc.yaml', - sort: true + sort: true, ) ) @@ -620,7 +620,7 @@ workflow EAGER { ch_multiqc_custom_config.toList(), ch_multiqc_logo.toList(), [], - [] + [], ) emit: