diff --git a/CHANGELOG.md b/CHANGELOG.md index 02c6831d..b7af38b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.1.0 'Brass Pigeon' - [2025-05-08] +## v1.1.0 'Brass Pigeon' - [2025-07-11] ### `Added` diff --git a/conf/old.modules.config b/conf/old.modules.config deleted file mode 100644 index 6c0c27b2..00000000 --- a/conf/old.modules.config +++ /dev/null @@ -1,597 +0,0 @@ -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 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 { - // General catch-all - publishDir = [ - path: { "${params.outdir}/${meta.id}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - /* - ---------- - Reads in - ONT - ---------- - */ - // nanoq: local module; QC - withName: NANOQ { - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/nanoq" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // only local module - withName: COLLECT { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/collect" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // porechop: nf-core module - withName: PORECHOP { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/porechop" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // Genomescope / jellyfish: local modules - withName: COUNT { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/genomescope/jellyfish/count/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: DUMP { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/genomescope/jellyfish/dump/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: STATS { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/genomescope/jellyfish/stats/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: HISTO { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/genomescope/jellyfish/histo/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: GENOMESCOPE { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/genomescope/genomescope/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - /* - ---------- - Reads in - HiFi - all nf-core - ---------- - */ - withName: LIMA { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/lima/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: TO_FASTQ { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/lima/fastq/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - /* - ---------- - Reads in - Short reads - all nf-core - ---------- - */ - withName: TRIMGALORE { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/trimgalore" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: MERYL_COUNT { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/meryl/count/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: MERYL_UNIONSUM { - publishDir = [ - path: { "${params.outdir}/${meta.id}/reads/meryl/unionsum/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - /* - ---------- - ASSEMBLY - ---------- - */ - // FLYE: nf-core - withName: FLYE { - ext.args = { - [ - meta.genome_size ? "--genome-size ${meta.genome_size}" : '', - params.flye_args - ].join(" ").trim() - } - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/flye/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // HIFIASM: - /* updated nf-core module */ - - withName: HIFIASM { - ext.args = { [ params.hifiasm_args ].join(" ").trim() } - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/hifiasm/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - withName: HIFIASM_ONT { - ext.args = { [ params.hifiasm_args, "--ont" ].join(" ").trim() } - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/hifiasm_ont/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: GFA_2_FA { - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/hifiasm/fasta" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: GFA_2_FA_HIFI { - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/hifiasm/fasta" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: GFA_2_FA_ONT { - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/hifiasm_ont/fasta" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*ASSEMBLE:.*RAGTAG_PATCH' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/ragtag/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_assembly_patch" } - } - - /* - ---------- - Polishing - ---------- - */ - // Medaka: local; nf-core module cant deal with gzipped input - withName: MEDAKA { - ext.args1 = { } // args mini_align - ext.args2 = { [params.medaka_model ? "--model ${params.medaka_model}" : ''].join(" ").trim() } // args medaka_inference - ext.args3 = { } // args medaka sequence - ext.prefix = { "${meta.id}_medaka" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/polish/medaka" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // Pilon: nf-core - withName: PILON { - ext.prefix = { "${meta.id}_pilon" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/polish/pilon" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - /* - ---------- - Scaffolding - ---------- - */ - // RagTag - withName: '.*SCAFFOLD:.*RAGTAG_SCAFFOLD' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/scaffold/ragtag/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_ragtag" } - ext.args = [ - "-C", - "-u", - "-r", - "-w" - ].join(" ").trim() - } - - withName: LINKS { - publishDir = [ - path: { "${params.outdir}/${meta.id}/scaffold/links/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_links" } - ext.args = ["-t 40,200", "-d 500,2000,5000"].join(" ").trim() - } - - // No nf-core module yet. - withName: LONGSTITCH { - publishDir = [ - path: { "${params.outdir}/${meta.id}/scaffold/longstitch/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_longstitch" } - } - /* - -------- - Annotations - liftoff nf-core module - -------- - gff file goes with fasta file - */ - - withName: '.*ASSEMBLE:.*LIFTOFF' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/assembly/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_assembly" } - } - - withName: '.*PILON:.*LIFTOFF' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/polish/pilon/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_pilon" } - } - - withName: '.*MEDAKA:.*LIFTOFF' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/polish/medaka" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_medaka" } - } - - withName: '.*RAGTAG:.*LIFTOFF' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/scaffold/ragtag/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_ragtag" } - } - - withName: '.*LONGSTITCH:.*LIFTOFF' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/scaffold/longstitch" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_longstitch" } - } - - withName: '.*LINKS:.*LIFTOFF' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/scaffold/links" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_links" } - } - - /* - ---------- - QC - ---------- - */ - - // BUSCO: nf-core - withName: '.*:ASSEMBLE:.*:BUSCO' { - ext.prefix = { "${meta.id}_assembly-${lineage}" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/BUSCO/" }, - mode: params.publish_dir_mode, - pattern: "*{-busco,_summary}*", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*PILON:.*:BUSCO' { - ext.prefix = { "${meta.id}_pilon-${lineage}" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/BUSCO/" }, - mode: params.publish_dir_mode, - pattern: "*{-busco,_summary}*", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*MEDAKA:.*:BUSCO' { - ext.prefix = { "${meta.id}_medaka-${lineage}" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/BUSCO/" }, - mode: params.publish_dir_mode, - pattern: "*{-busco,_summary}*", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*LINKS:.*:BUSCO' { - ext.prefix = { "${meta.id}_links-${lineage}" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/BUSCO/" }, - mode: params.publish_dir_mode, - pattern: "*{-busco,_summary}*", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*LONGSTITCH:.*:BUSCO' { - ext.prefix = { "${meta.id}_longstitch-${lineage}" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/BUSCO/" }, - mode: params.publish_dir_mode, - pattern: "*{-busco,_summary}*", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // avoid catching ragtag from ont_on_hifi assembly - withName: '.*:SCAFFOLD:.*RAGTAG:.*:BUSCO' { - ext.prefix = { "${meta.id}_ragtag-${lineage}" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/BUSCO/" }, - mode: params.publish_dir_mode, - pattern: "*{-busco,_summary}*", - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - // QUAST: Prefer to keep the local module since it can deal with the inputs I have - withName: '.*:ASSEMBLE:.*:QUAST' { - ext.prefix = { "${meta.id}_assembly" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/QUAST" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*PILON:.*:QUAST' { - ext.prefix = { "${meta.id}_pilon" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/QUAST" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*MEDAKA:.*:QUAST' { - ext.prefix = { "${meta.id}_medaka" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/QUAST" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*LINKS:.*:QUAST' { - ext.prefix = { "${meta.id}_links" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/QUAST/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*LONGSTITCH:.*:QUAST' { - ext.prefix = { "${meta.id}_longstitch" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/QUAST/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // avoid catching ragtag from ont_on_hifi assembly - withName: '.*:SCAFFOLD:.*RAGTAG:.*:QUAST' { - ext.prefix = { "${meta.id}_ragtag" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/QUAST/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - - // MERQURY: nf-core - withName: '.*:ASSEMBLE:.*:MERQURY' { - ext.prefix = { "${meta.id}_assembly" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/merqury/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*PILON:.*:MERQURY' { - ext.prefix = { "${meta.id}_pilon" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/merqury/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*MEDAKA:.*:MERQURY' { - ext.prefix = { "${meta.id}_medaka" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/merqury/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*LINKS:.*:MERQURY' { - ext.prefix = { "${meta.id}_links" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/merqury/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - withName: '.*LONGSTITCH:.*:MERQURY' { - ext.prefix = { "${meta.id}_longstitch" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/merqury/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // avoid catching ragtag from ont_on_hifi assembly - withName: '.*:SCAFFOLD:.*RAGTAG:.*:MERQURY' { - ext.prefix = { "${meta.id}_ragtag" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/merqury/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } - // Refence - withName: '.*MAP_TO_REF.*' { - ext.prefix = { "${meta.id}_to_reference" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/reference/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - // Assembly mappings - withName: '.*ASSEMBLE:.*MAP_TO_ASSEMBLY.*' { - ext.prefix = { "${meta.id}_assembly" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - withName: '.*MEDAKA:.*MAP_TO_ASSEMBLY.*' { - ext.prefix = { "${meta.id}_medaka" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - withName: '.*PILON:.*MAP_TO_ASSEMBLY.*' { - ext.prefix = { "${meta.id}_pilon" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - withName: '.*LONGSTITCH:.*MAP_TO_ASSEMBLY.*' { - ext.prefix = { "${meta.id}_longstitch" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - withName: '.*LINKS:.*MAP_TO_ASSEMBLY.*' { - ext.prefix = { "${meta.id}_links" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - withName: '.*RAGTAG:.*MAP_TO_ASSEMBLY.*' { - ext.prefix = { "${meta.id}_ragtag" } - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.args = { - (params.hifi && params.ont) ? (params.qc_reads == 'ONT' ? "-ax map-ont" : "-ax map-hifi") : (params.ont) ? "-ax map-ont" : "-ax map-hifi" - } - } - // Pilon mapping - withName: '.*PILON:MAP_SR.*' { - publishDir = [ - path: { "${params.outdir}/${meta.id}/QC/alignments/shortreads/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - ext.prefix = { "${meta.id}_shortreads" } - ext.args = { "-ax sr " } - } - /* - -------- - Report - */ - withName: REPORT { - publishDir = [ - path: { "${params.outdir}/report/" }, - mode: params.publish_dir_mode, - saveAs: { filename -> filename.equals('versions.yml') ? null : filename } - ] - } -} diff --git a/conf/test.config b/conf/test.config index b8875c0f..be3dc0e5 100644 --- a/conf/test.config +++ b/conf/test.config @@ -17,13 +17,7 @@ process { time: '1.h' ] } -/* -process { - withName: 'HIFIASM.*' { - memory = '15.GB' - } -} -*/ + params { config_profile_name = 'Test profile' config_profile_description = 'Minimal test dataset to check pipeline function' diff --git a/nextflow.config b/nextflow.config index 17bb4d91..45e4f254 100644 --- a/nextflow.config +++ b/nextflow.config @@ -239,8 +239,7 @@ includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !pa // Load nf-core/genomeassembler custom profiles from different institutions. -includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/genomeassembler.config" : "/dev/null" - +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/genomeassembler.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled // Set to your registry if you have a mirror of containers