/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Config file for defining DSL2 per module options and publishing paths ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Available keys to override module options: ext.args = Additional arguments appended to command in module. ext.args2 = Second set of arguments appended to command in module (multi-tool modules). ext.args3 = Third set of arguments appended to command in module (multi-tool modules). ext.prefix = File name prefix for output files. ---------------------------------------------------------------------------------------- */ process { withName: FASTQC { ext.args = '--quiet' ext.prefix = { "${meta.id}_${meta.run_accession}_raw" } publishDir = [ path: { "${params.outdir}/fastqc/raw" }, mode: params.publish_dir_mode, pattern: '*.{html,zip}' ] } withName: FASTQC_PROCESSED { ext.args = '--quiet' ext.prefix = { "${meta.id}_${meta.run_accession}_processed" } publishDir = [ path: { "${params.outdir}/fastqc/processed" }, mode: params.publish_dir_mode, pattern: '*.{html,zip}' ] } withName: FALCO { ext.prefix = { "${meta.id}_${meta.run_accession}_raw_falco" } publishDir = [ path: { "${params.outdir}/falco/raw" }, mode: params.publish_dir_mode, pattern: '*.{html,txt,zip}' ] } withName: FALCO_PROCESSED { ext.prefix = { "${meta.id}_${meta.run_accession}_processed_falco" } publishDir = [ path: { "${params.outdir}/falco/processed" }, mode: params.publish_dir_mode, pattern: '*.{html,txt,zip}' ] } withName: FASTP_SINGLE { ext.args = [ // trimming options params.shortread_qc_skipadaptertrim ? "--disable_adapter_trimming" : "", params.shortread_qc_adapterlist ? "" : params.shortread_qc_adapter1 ? "--adapter_sequence ${params.shortread_qc_adapter1}" : "", // filtering options "--length_required ${params.shortread_qc_minlength}", (params.perform_shortread_complexityfilter && params.shortread_complexityfilter_tool == 'fastp') ? "--low_complexity_filter --complexity_threshold ${params.shortread_complexityfilter_fastp_threshold}" : '' ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/fastp" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', enabled: params.save_preprocessed_reads ], [ path: { "${params.outdir}/fastp" }, mode: params.publish_dir_mode, pattern: '*.{log,html,json}' ] ] } withName: FASTP_PAIRED { ext.args = [ // collapsing options - option to retain singletons params.shortread_qc_includeunmerged ? '--include_unmerged' : '', // trimming options params.shortread_qc_skipadaptertrim ? "--disable_adapter_trimming" : "", params.shortread_qc_adapterlist ? "" : params.shortread_qc_adapter1 ? "--adapter_sequence ${params.shortread_qc_adapter1}" : "", params.shortread_qc_adapterlist ? "" : params.shortread_qc_adapter2 ? "--adapter_sequence_r2 ${params.shortread_qc_adapter2}" : "--detect_adapter_for_pe", // filtering options "--length_required ${params.shortread_qc_minlength}", params.perform_shortread_complexityfilter && params.shortread_complexityfilter_tool == 'fastp' ? "--low_complexity_filter --complexity_threshold ${params.shortread_complexityfilter_fastp_threshold}" : '' ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/fastp" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', enabled: params.save_preprocessed_reads ], [ path: { "${params.outdir}/fastp" }, mode: params.publish_dir_mode, pattern: '*.{log,html,json}' ] ] } withName: ADAPTERREMOVAL_SINGLE { ext.args = [ // trimming options params.shortread_qc_skipadaptertrim ? "--adapter1 ''" : params.shortread_qc_adapterlist ? "" : params.shortread_qc_adapter1 ? "--adapter1 ${params.shortread_qc_adapter1}" : "", // filtering options "--minlength ${params.shortread_qc_minlength}" ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/adapterremoval" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', enabled: params.save_preprocessed_reads ], [ path: { "${params.outdir}/adapterremoval" }, mode: params.publish_dir_mode, pattern: '*.settings' ] ] } withName: ADAPTERREMOVAL_PAIRED { ext.args = [ // collapsing options params.shortread_qc_mergepairs ? "--collapse" : "", // trimming options params.shortread_qc_skipadaptertrim ? "--adapter1 ''" : params.shortread_qc_adapterlist ? "" : params.shortread_qc_adapter1 ? "--adapter1 ${params.shortread_qc_adapter1}" : "", // adding adapter list happens at module input channel level params.shortread_qc_skipadaptertrim ? "--adapter2 ''" : params.shortread_qc_adapterlist ? "" : params.shortread_qc_adapter2 ? "--adapter2 ${params.shortread_qc_adapter2}" : "", // filtering options "--minlength ${params.shortread_qc_minlength}" ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/adapterremoval" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', enabled: params.save_preprocessed_reads ], [ path: { "${params.outdir}/adapterremoval" }, mode: params.publish_dir_mode, pattern: '*.settings' ] ] } withName: PORECHOP_PORECHOP { ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/porechop" }, mode: params.publish_dir_mode, pattern: '*_porechopped.fastq.gz', enabled: params.save_preprocessed_reads ], [ path: { "${params.outdir}/porechop" }, mode: params.publish_dir_mode, pattern: '*.log' ] ] } withName: FILTLONG { ext.args = [ "--min_length ${params.longread_qc_qualityfilter_minlength}", "--keep_percent ${params.longread_qc_qualityfilter_keeppercent}", "--target_bases ${params.longread_qc_qualityfilter_targetbases}" ] .join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}_filtered" } publishDir = [ [ path: { "${params.outdir}/filtlong" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', enabled: params.save_preprocessed_reads ], [ path: { "${params.outdir}/filtlong" }, mode: params.publish_dir_mode, pattern: '*.log' ] ] } withName: BOWTIE2_BUILD { publishDir = [ path: { "${params.outdir}/bowtie2/build" }, mode: params.publish_dir_mode, enabled: params.save_hostremoval_index, pattern: 'bowtie2' ] } // Saving unmapped reads as FQ comes via input channel! withName: BOWTIE2_ALIGN { ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/bowtie2/align" }, mode: params.publish_dir_mode, pattern: '*.log' ], [ path: { "${params.outdir}/bowtie2/align" }, mode: params.publish_dir_mode, enabled: params.save_hostremoval_bam, pattern: '*.bam' ], [ path: { "${params.outdir}/bowtie2/align" }, mode: params.publish_dir_mode, enabled: params.save_hostremoval_unmapped, pattern: '*.fastq.gz' ] ] } withName: MINIMAP2_INDEX { ext.args = '-x map-ont' publishDir = [ path: { "${params.outdir}/minimap2/index" }, mode: params.publish_dir_mode, enabled: params.save_hostremoval_index, pattern: '*.mmi' ] } withName: MINIMAP2_ALIGN { ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ path: { "${params.outdir}/minimap2/align" }, mode: params.publish_dir_mode, enabled: params.save_hostremoval_bam, pattern: '*.bam' ] } withName: SAMTOOLS_VIEW { ext.args = '-f 4' ext.prefix = { "${meta.id}_${meta.run_accession}.unmapped" } } withName: SAMTOOLS_BAM2FQ { ext.prefix = { "${meta.id}_${meta.run_accession}.unmapped" } publishDir = [ path: { "${params.outdir}/samtools/bam2fq" }, mode: params.publish_dir_mode, enabled: params.save_hostremoval_unmapped, pattern: '*.fq.gz' ] } withName: SAMTOOLS_STATS { ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ path: { "${params.outdir}/samtools/stats" }, mode: params.publish_dir_mode, pattern: '*stats' ] } withName: BBMAP_BBDUK { ext.args = [ "entropy=${params.shortread_complexityfilter_entropy}", "entropywindow=${params.shortread_complexityfilter_bbduk_windowsize}", params.shortread_complexityfilter_bbduk_mask ? "entropymask=t" : "entropymask=f" ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/bbduk/" }, mode: params.publish_dir_mode, pattern: '*.{fastq.gz,log}', enabled: params.save_complexityfiltered_reads ], [ path: { "${params.outdir}/bbduk/" }, mode: params.publish_dir_mode, pattern: '*.log' ] ] } withName: PRINSEQPLUSPLUS { ext.args = [ params.shortread_complexityfilter_prinseqplusplus_mode == 'dust' ? "-lc_dust=${params.shortread_complexityfilter_prinseqplusplus_dustscore}" : "-lc_entropy=${params.shortread_complexityfilter_entropy}", "-trim_qual_left=0 -trim_qual_left=0 -trim_qual_window=0 -trim_qual_step=0", ].join(' ').trim() ext.prefix = { "${meta.id}_${meta.run_accession}" } publishDir = [ [ path: { "${params.outdir}/prinseqplusplus/" }, mode: params.publish_dir_mode, pattern: '*{_good_out.fastq.gz,_good_out_R1.fastq.gz,_good_out_R2.fastq.gz}', enabled: params.save_complexityfiltered_reads ], [ path: { "${params.outdir}/prinseqplusplus/" }, mode: params.publish_dir_mode, pattern: '*.log' ] ] } withName: CAT_FASTQ { ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/run_merging/" }, mode: params.publish_dir_mode, pattern: '*.fastq.gz', enabled: params.save_runmerged_reads ] } withName: MALT_RUN { ext.args = { "${meta.db_params} -m ${params.malt_mode}" } // one run with multiple samples, so fix ID to just db name to ensure clean log name ext.prefix = { "${meta.db_name}" } publishDir = [ path: { "${params.outdir}/malt/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{rma6,log,sam}' ] } withName: 'MEGAN_RMA2INFO_TSV' { ext.args = "-c2c Taxonomy" ext.prefix = { "${meta.id}" } publishDir = [ path: { "${params.outdir}/malt/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{txt.gz,megan}' ] } withName: KRAKEN2_KRAKEN2 { ext.args = params.kraken2_save_minimizers ? { "${meta.db_params} --report-minimizer-data" } : { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { meta.tool == "bracken" ? "${meta.id}_${meta.db_name}.bracken" : "${meta.id}_${meta.db_name}.kraken2" } : { meta.tool == "bracken" ? "${meta.id}_${meta.run_accession}_${meta.db_name}.bracken" : "${meta.id}_${meta.run_accession}_${meta.db_name}.kraken2" } publishDir = [ path: { "${params.outdir}/kraken2/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{txt,fastq.gz}' ] } withName: BRACKEN_BRACKEN { errorStrategy = 'ignore' ext.args = { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.bracken" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.bracken" } publishDir = [ path: { "${params.outdir}/bracken/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.tsv' ] } withName: BRACKEN_COMBINEBRACKENOUTPUTS { ext.prefix = { "bracken_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/bracken/" }, mode: params.publish_dir_mode, pattern: '*.txt' ] } withName: KRAKENTOOLS_COMBINEKREPORTS_KRAKEN { ext.prefix = { "kraken2_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/kraken2/" }, mode: params.publish_dir_mode, pattern: '*.txt' ] } withName: KRAKENUNIQ_PRELOADEDKRAKENUNIQ { ext.args = { "${meta.db_params}" } // one run with multiple samples, so fix ID to just db name to ensure clean log name ext.prefix = { "${meta.db_name}.krakenuniq" } publishDir = [ path: { "${params.outdir}/krakenuniq/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{txt,fastq.gz}' ] } withName: KRONA_CLEANUP { ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}" } publishDir = [ path: { "${params.outdir}/krona/" }, mode: params.publish_dir_mode, pattern: '*.{html}' ] } withName: KRONA_KTIMPORTTEXT { ext.prefix = { "${meta.tool}_${meta.id}" } publishDir = [ path: { "${params.outdir}/krona/" }, mode: params.publish_dir_mode, pattern: '*.{html}' ] } withName: 'MEGAN_RMA2INFO_KRONA' { ext.args = { "--read2class Taxonomy" } ext.prefix = { "${meta.id}_${meta.db_name}" } } withName: KRONA_KTIMPORTTAXONOMY { ext.args = "-i" ext.prefix = { "${meta.tool}_${meta.id}" } publishDir = [ path: { "${params.outdir}/krona/" }, mode: params.publish_dir_mode, pattern: '*.{html}' ] } withName: METAPHLAN3_METAPHLAN3 { ext.args = { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.metaphlan3" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.metaphlan3" } publishDir = [ path: { "${params.outdir}/metaphlan3/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{biom,txt}' ] } withName: METAPHLAN3_MERGEMETAPHLANTABLES { ext.prefix = { "metaphlan3_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/metaphlan3/" }, mode: params.publish_dir_mode, pattern: '*.{txt}' ] } withName: CENTRIFUGE_CENTRIFUGE { publishDir = [ path: { "${params.outdir}/centrifuge/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{txt,sam,gz}' ] ext.args = { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.centrifuge" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.centrifuge" } } withName: CENTRIFUGE_KREPORT { errorStrategy = {task.exitStatus == 255 ? 'ignore' : 'retry'} ext.args = { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.centrifuge" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.centrifuge" } publishDir = [ path: { "${params.outdir}/centrifuge/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{txt}' ] } withName: KRAKENTOOLS_COMBINEKREPORTS_CENTRIFUGE { errorStrategy = { task.exitStatus in [255,1] ? 'ignore' : 'retry' } ext.prefix = { "centrifuge_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/centrifuge/" }, mode: params.publish_dir_mode, pattern: '*.{txt}' ] } withName: KAIJU_KAIJU { ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.kaiju" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.kaiju" } publishDir = [ path: { "${params.outdir}/kaiju/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.tsv' ] ext.args = { "${meta.db_params}" } } withName: '.*PROFILING:KAIJU_KAIJU2TABLE' { ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.kaijutable" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.kaijutable" } publishDir = [ path: { "${params.outdir}/kaiju/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{txt}' ] } withName: '.*STANDARDISATION_PROFILES:KAIJU_KAIJU2TABLE' { ext.prefix = { "kaiju_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/kaiju/" }, mode: params.publish_dir_mode, pattern: '*.{txt}' ] } withName: KAIJU_KAIJU2KRONA { ext.args = '-v -u' } withName: DIAMOND_BLASTX { ext.args = { "${meta.db_params}" } ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}.diamond" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}.diamond" } publishDir = [ path: { "${params.outdir}/diamond/${meta.db_name}/" }, mode: params.publish_dir_mode, pattern: '*.{blast,xml,txt,daa,sam,tsv,paf,log}' ] } withName: MOTUS_PROFILE { ext.args = { [ params.motus_remove_ncbi_ids ? "" : "-p", params.motus_use_relative_abundance ? "" : "-c", params.motus_save_mgc_read_counts ? "-M ${task.ext.prefix}.mgc" : "" ].join(',').replaceAll(','," ") } ext.prefix = params.perform_runmerging ? { "${meta.id}_${meta.db_name}" } : { "${meta.id}_${meta.run_accession}_${meta.db_name}" } publishDir = [ path: { "${params.outdir}/motus/${meta.db_name}/" }, mode: params.publish_dir_mode ] } withName: MOTUS_MERGE { ext.args = { params.generate_biom_output ? "-B" : "" } ext.prefix = { "motus_${meta.id}_combined_reports" } publishDir = [ path: { "${params.outdir}/motus/" }, mode: params.publish_dir_mode ] } withName: TAXPASTA_MERGE { ext.args = { [ "-p ${meta.tool} -o ${meta.tool}_${meta.id}.${params.taxpasta_standardisation_format}", params.taxpasta_add_taxonomy ? "-p" : "", params.taxpasta_add_samplesheet ? "-s" :"" ].join(' ').trim() } publishDir = [ path: { "${params.outdir}/taxpasta/" }, mode: params.publish_dir_mode, pattern: '*.{tsv,csv,arrow,parquet,biom}' ] } withName: CUSTOM_DUMPSOFTWAREVERSIONS { publishDir = [ path: { "${params.outdir}/pipeline_info" }, mode: params.publish_dir_mode, pattern: '*_versions.yml' ] } withName: MULTIQC { publishDir = [ path: { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } }