From 3ace7b62a208d5e201455c25ccc1c615579f71ca Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 19 Feb 2026 13:36:43 +0100 Subject: [PATCH 01/24] try nf-metro --- .../nf-cmgg-preprocessing_logo_dark.png | Bin 78416 -> 79933 bytes .../nf-cmgg-preprocessing_logo_dark.svg | 16 +- docs/workflow.mmd | 197 +++++++++++++ docs/workflow.svg | 271 ++++++++++++++++++ 4 files changed, 476 insertions(+), 8 deletions(-) create mode 100644 docs/workflow.mmd create mode 100644 docs/workflow.svg diff --git a/docs/images/nf-cmgg-preprocessing_logo_dark.png b/docs/images/nf-cmgg-preprocessing_logo_dark.png index 2f4bd13f419811091ec85f16b0267bfe21c79f3c..2f2054b49e9f08c2b5d76141ceca5b742de102bc 100644 GIT binary patch literal 79933 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.st0{fill:#24af63}.st1{font-family:Arial, Helvetica, sans-serif;;font-weight:"bold"}.st2{font-size:209.8672px}.st4{fill:#ecdc86}.st7{fill:#396e35}nf-nf-cmgg/preprocessingpreprocessing|demux| bclconvert + bclconvert -->|demux| demultiplex_out + bclconvert -->|demux| multiqc_sav + multiqc_sav -->|demux| sav_out + end + + subgraph genome_alignment [Genome Alignment] + alignment_fastq_in[] + bwamem[bwa mem] + bwamem2[bwa mem2] + snapaligner[snap-aligner] + star[star] + bowtie2[bowtie2] + dragen[dragen] + strobealigner[strobe-align] + + bamsormadup[biobambam bamsormadup] + samtools_convert[samtools convert] + samtools_sormadup[samtools sormadup] + samtools_sort[samtools sort] + + cram_out[cram] + + alignment_fastq_in -->|align_bwamem1_bamsormadup_samtools_convert,align_bwamem1_samtools_sormadup,align_bwamem1_samtools_sort| bwamem + alignment_fastq_in -->|align_bwamem2_bamsormadup_samtools_convert,align_bwamem2_samtools_sormadup,align_bwamem2_samtools_sort| bwamem2 + alignment_fastq_in -->|align_snapaligner_bamsormadup_samtools_convert,align_snapaligner_samtools_sormadup,align_snapaligner_samtools_sort| snapaligner + alignment_fastq_in -->|align_star_bamsormadup_samtools_convert,align_star_samtools_sormadup,align_star_samtools_sort| star + alignment_fastq_in -->|align_bowtie2_bamsormadup_samtools_convert,align_bowtie2_samtools_sormadup,align_bowtie2_samtools_sort| bowtie2 + alignment_fastq_in -->|align_dragen_bamsormadup_samtools_convert,align_dragen_samtools_sormadup,align_dragen_samtools_sort| dragen + alignment_fastq_in -->|align_strobealigner_bamsormadup_samtools_convert,align_strobealigner_samtools_sormadup,align_strobealigner_samtools_sort| strobealigner + + bwamem -->|align_bwamem1_bamsormadup_samtools_convert| bamsormadup + bwamem2 -->|align_bwamem2_bamsormadup_samtools_convert| bamsormadup + snapaligner -->|align_snapaligner_bamsormadup_samtools_convert| bamsormadup + star -->|align_star_bamsormadup_samtools_convert| bamsormadup + bowtie2 -->|align_bowtie2_bamsormadup_samtools_convert| bamsormadup + dragen -->|align_dragen_bamsormadup_samtools_convert| bamsormadup + strobealigner -->|align_strobealigner_bamsormadup_samtools_convert| bamsormadup + + bamsormadup -->|align_bwamem1_bamsormadup_samtools_convert| samtools_convert + bamsormadup -->|align_bwamem2_bamsormadup_samtools_convert| samtools_convert + bamsormadup -->|align_snapaligner_bamsormadup_samtools_convert| samtools_convert + bamsormadup -->|align_star_bamsormadup_samtools_convert| samtools_convert + bamsormadup -->|align_bowtie2_bamsormadup_samtools_convert| samtools_convert + bamsormadup -->|align_dragen_bamsormadup_samtools_convert| samtools_convert + bamsormadup -->|align_strobealigner_bamsormadup_samtools_convert| samtools_convert + + bwamem -->|align_bwamem1_samtools_sormadup| samtools_sormadup + bwamem2 -->|align_bwamem2_samtools_sormadup| samtools_sormadup + snapaligner -->|align_snapaligner_samtools_sormadup| samtools_sormadup + star -->|align_star_samtools_sormadup| samtools_sormadup + bowtie2 -->|align_bowtie2_samtools_sormadup| samtools_sormadup + dragen -->|align_dragen_samtools_sormadup| samtools_sormadup + strobealigner -->|align_strobealigner_samtools_sormadup| samtools_sormadup + + bwamem -->|align_bwamem1_samtools_sort| samtools_sort + bwamem2 -->|align_bwamem2_samtools_sort| samtools_sort + snapaligner -->|align_snapaligner_samtools_sort| samtools_sort + star -->|align_star_samtools_sort| samtools_sort + bowtie2 -->|align_bowtie2_samtools_sort| samtools_sort + dragen -->|align_dragen_samtools_sort| samtools_sort + strobealigner -->|align_strobealigner_samtools_sort| samtools_sort + + samtools_convert -->|align_bwamem1_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_bwamem1_samtools_sormadup| cram_out + samtools_sort -->|align_bwamem1_samtools_sort| cram_out + + samtools_convert -->|align_bwamem2_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_bwamem2_samtools_sormadup| cram_out + samtools_sort -->|align_bwamem2_samtools_sort| cram_out + + samtools_convert -->|align_snapaligner_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_snapaligner_samtools_sormadup| cram_out + samtools_sort -->|align_snapaligner_samtools_sort| cram_out + + samtools_convert -->|align_star_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_star_samtools_sormadup| cram_out + samtools_sort -->|align_star_samtools_sort| cram_out + + samtools_convert -->|align_bowtie2_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_bowtie2_samtools_sormadup| cram_out + samtools_sort -->|align_bowtie2_samtools_sort| cram_out + + samtools_convert -->|align_dragen_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_dragen_samtools_sormadup| cram_out + samtools_sort -->|align_dragen_samtools_sort| cram_out + + samtools_convert -->|align_strobealigner_bamsormadup_samtools_convert| cram_out + samtools_sormadup -->|align_strobealigner_samtools_sormadup| cram_out + samtools_sort -->|align_strobealigner_samtools_sort| cram_out + + end + + subgraph coverage_qc [Coverage QC] + coverage_qc_in[] + mosdepth[mosdepth] + samtools_coverage[samtools coverage] + panelcoverage[Panel Coverage] + coverage_qc_reports_out[Coverage Reports] + + coverage_qc_in -->|coverage| mosdepth + coverage_qc_in -->|coverage| samtools_coverage + coverage_qc_in -->|coverage| panelcoverage + + mosdepth -->|coverage| coverage_qc_reports_out + samtools_coverage -->|coverage| coverage_qc_reports_out + panelcoverage -->|coverage| coverage_qc_reports_out + + end + + subgraph bam_qc [BAM QC] + bam_qc_in[] + samtools_stats[samtools stats] + samtools_flagstat[samtools flagstat] + samtools_idxstats[samtools idxstats] + picard_multiplemetrics[picard CollectMultipleMetrics] + picard_hsmetrics[picard CollectHsMetrics] + picard_wgsmetrics[picard CollectWgsMetrics] + bam_qc_reports_out[QC Reports] + + bam_qc_in -->|bam_qc_roi,bam_qc_wgs| samtools_stats + bam_qc_in -->|bam_qc_roi,bam_qc_wgs| samtools_flagstat + bam_qc_in -->|bam_qc_roi,bam_qc_wgs| samtools_idxstats + bam_qc_in -->|bam_qc_roi,bam_qc_wgs| picard_multiplemetrics + bam_qc_in -->|bam_qc_roi| picard_hsmetrics + bam_qc_in -->|bam_qc_wgs| picard_wgsmetrics + + samtools_stats -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out + samtools_flagstat -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out + samtools_idxstats -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out + picard_multiplemetrics -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out + picard_hsmetrics -->|bam_qc_roi| bam_qc_reports_out + picard_wgsmetrics -->|bam_qc_wgs| bam_qc_reports_out + end + + md5sum[md5sum] + multiqc_main[Main MultiQC] + multiqc_library[Library MultiQC] + + fastq_in -->|main| alignment_fastq_in + demultiplex_out -->|main| alignment_fastq_in + cram_out -->|main| coverage_qc_in + cram_out -->|main| bam_qc_in + cram_out -->|main| md5sum + sav_out -->|main| multiqc_main + coverage_qc_reports_out -->|main| multiqc_library + bam_qc_reports_out -->|main| multiqc_library diff --git a/docs/workflow.svg b/docs/workflow.svg new file mode 100644 index 00000000..d1416d01 --- /dev/null +++ b/docs/workflow.svg @@ -0,0 +1,271 @@ + + + + + + + +1 +Basecalling & Demultiplexing + + +2 +Genome Alignment + + +3 +Coverage QC + + +4 +BAM QC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BCL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FASTQ +md5sum +Main MultiQC +Library MultiQC +fastq_in +BCL +alignment_fastq_in +coverage_qc_in +bam_qc_in +bcl-convert +bwa mem +bwa mem2 +snap-aligner +star +bowtie2 +dragen +strobe-align +samtools stats +mosdepth +samtools flagstat +samtools coverage +samtools idxstats +Panel Coverage +picard CollectWgsMetrics +picard CollectMultipleMetrics +picard CollectHsMetrics +MultiQC-SAV +Fastq +biobambam bamsormadup +samtools sormadup +samtools sort +Coverage Reports +QC Reports +SAV +samtools convert +cram + + + +Main + +Demultiplexing + +Aligner: BWA MEM, Markdup: Biobambam Bamsormadup + +Aligner: BWA MEM2, Markdup: Biobambam Bamsormadup + +Aligner: Snap-aligner, Markdup: Biobambam Bamsormadup + +Aligner: STAR, Markdup: Biobambam Bamsormadup + +Aligner: Bowtie2, Markdup: Biobambam Bamsormadup + +Aligner: Dragen, Markdup: Biobambam Bamsormadup + +Aligner: Strobe-aligner, Markdup: Biobambam Bamsormadup + +Aligner: BWA MEM, Markdup: SAMtools Sormadup + +Aligner: BWA MEM2, Markdup: SAMtools Sormadup + +Aligner: Snap-aligner, Markdup: SAMtools Sormadup + +Aligner: STAR, Markdup: SAMtools Sormadup + +Aligner: Bowtie2, Markdup: SAMtools Sormadup + +Aligner: Dragen, Markdup: SAMtools Sormadup + +Aligner: Strobe-aligner, Markdup: SAMtools Sormadup + +Aligner: BWA MEM, Markdup: SAMtools Sort + +Aligner: BWA MEM2, Markdup: SAMtools Sort + +Aligner: Snap-aligner, Markdup: SAMtools Sort + +Aligner: STAR, Markdup: SAMtools Sort + +Aligner: Bowtie2, Markdup: SAMtools Sort + +Aligner: Dragen, Markdup: SAMtools Sort + +Aligner: Strobe-aligner, Markdup: SAMtools Sort + +Coverage QC + +BAM QC - ROI + +BAM QC - WGS +created with nf-metro v0.3.0 + From 42a5e9413d259c644b9b57e5a8691e37b2e6084a Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 19 Feb 2026 13:38:01 +0100 Subject: [PATCH 02/24] rename files --- docs/{workflow.mmd => workflow-dark.mmd} | 0 docs/{workflow.svg => workflow-dark.svg} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename docs/{workflow.mmd => workflow-dark.mmd} (100%) rename docs/{workflow.svg => workflow-dark.svg} (100%) diff --git a/docs/workflow.mmd b/docs/workflow-dark.mmd similarity index 100% rename from docs/workflow.mmd rename to docs/workflow-dark.mmd diff --git a/docs/workflow.svg b/docs/workflow-dark.svg similarity index 100% rename from docs/workflow.svg rename to docs/workflow-dark.svg From c696749712d296d726479d17cc7c3f848cf7d346 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:38:18 +0100 Subject: [PATCH 03/24] more tinkering --- docs/workflow-dark.mmd | 296 ++++++++++------------- docs/workflow-dark.svg | 521 ++++++++++++++++++++--------------------- 2 files changed, 378 insertions(+), 439 deletions(-) diff --git a/docs/workflow-dark.mmd b/docs/workflow-dark.mmd index 6e061b84..5005df0b 100644 --- a/docs/workflow-dark.mmd +++ b/docs/workflow-dark.mmd @@ -1,197 +1,143 @@ %%metro title: nf-cmgg/preprocessing %%metro logo: images/nf-cmgg-preprocessing_logo_dark.png -%%metro style: light +%%metro style: dark + +%%metro line: main | Main | #4CAF50 +%%metro line: align_rna | RNA Alignment | #FF9800 +%%metro line: align_dna | DNA Alignment | #ff1e00ff +%%metro line: align_postprocessing | Alignment Postprocessing | #9C27B0 +%%metro line: qc | Quality Control | #2196F3 -graph LR -%%metro entry: bcl_in | BCL -%%metro entry: fastq_in | FASTQ %%metro file: fastq_in | FASTQ %%metro file: bcl_in | BCL +%%metro file: cram_out | CRAM +%%metro file: fastq_out | FASTQ +%%metro file: reports_out | HTML -%%metro line: main | Main | #4CAF50 - -%%metro line: demux | Demultiplexing | #4CAF50 - -%%metro line: align_bwamem1_bamsormadup_samtools_convert | Aligner: BWA MEM, Markdup: Biobambam Bamsormadup | #2196F3 -%%metro line: align_bwamem2_bamsormadup_samtools_convert | Aligner: BWA MEM2, Markdup: Biobambam Bamsormadup | #2196F3 -%%metro line: align_snapaligner_bamsormadup_samtools_convert | Aligner: Snap-aligner, Markdup: Biobambam Bamsormadup | #2196F3 -%%metro line: align_star_bamsormadup_samtools_convert | Aligner: STAR, Markdup: Biobambam Bamsormadup | #2196F3 -%%metro line: align_bowtie2_bamsormadup_samtools_convert | Aligner: Bowtie2, Markdup: Biobambam Bamsormadup | #2196F3 -%%metro line: align_dragen_bamsormadup_samtools_convert | Aligner: Dragen, Markdup: Biobambam Bamsormadup | #2196F3 -%%metro line: align_strobealigner_bamsormadup_samtools_convert | Aligner: Strobe-aligner, Markdup: Biobambam Bamsormadup | #2196F3 - -%%metro line: align_bwamem1_samtools_sormadup | Aligner: BWA MEM, Markdup: SAMtools Sormadup | #2196F3 -%%metro line: align_bwamem2_samtools_sormadup | Aligner: BWA MEM2, Markdup: SAMtools Sormadup | #2196F3 -%%metro line: align_snapaligner_samtools_sormadup | Aligner: Snap-aligner, Markdup: SAMtools Sormadup | #2196F3 -%%metro line: align_star_samtools_sormadup | Aligner: STAR, Markdup: SAMtools Sormadup | #2196F3 -%%metro line: align_bowtie2_samtools_sormadup | Aligner: Bowtie2, Markdup: SAMtools Sormadup | #2196F3 -%%metro line: align_dragen_samtools_sormadup | Aligner: Dragen, Markdup: SAMtools Sormadup | #2196F3 -%%metro line: align_strobealigner_samtools_sormadup | Aligner: Strobe-aligner, Markdup: SAMtools Sormadup | #2196F3 - -%%metro line: align_bwamem1_samtools_sort | Aligner: BWA MEM, Markdup: SAMtools Sort | #2196F3 -%%metro line: align_bwamem2_samtools_sort | Aligner: BWA MEM2, Markdup: SAMtools Sort | #2196F3 -%%metro line: align_snapaligner_samtools_sort | Aligner: Snap-aligner, Markdup: SAMtools Sort | #2196F3 -%%metro line: align_star_samtools_sort | Aligner: STAR, Markdup: SAMtools Sort | #2196F3 -%%metro line: align_bowtie2_samtools_sort | Aligner: Bowtie2, Markdup: SAMtools Sort | #2196F3 -%%metro line: align_dragen_samtools_sort | Aligner: Dragen, Markdup: SAMtools Sort | #2196F3 -%%metro line: align_strobealigner_samtools_sort | Aligner: Strobe-aligner, Markdup: SAMtools Sort | #2196F3 - -%%metro line: coverage | Coverage QC | #f38721ff - -%%metro line: bam_qc_roi | BAM QC - ROI| #f32121ff -%%metro line: bam_qc_wgs | BAM QC - WGS| #f321e9ff - - subgraph demultiplexing [Basecalling & Demultiplexing] +graph LR + %% define nodes + bcl_in[] + fastq_in[] + fastq_out[] + cram_out[] + reports_out[] + + subgraph demultiplexing + %%metro exit: right | main + %%metro exit: bottom | qc bcl_in[BCL] bclconvert[bcl-convert] - multiqc_sav[MultiQC-SAV] - demultiplex_out[Fastq] - sav_out[SAV] - - bcl_in -->|demux| bclconvert - bclconvert -->|demux| demultiplex_out - bclconvert -->|demux| multiqc_sav - multiqc_sav -->|demux| sav_out + bcl_in -->|main| bclconvert end - subgraph genome_alignment [Genome Alignment] - alignment_fastq_in[] - bwamem[bwa mem] - bwamem2[bwa mem2] - snapaligner[snap-aligner] - star[star] - bowtie2[bowtie2] - dragen[dragen] - strobealigner[strobe-align] - - bamsormadup[biobambam bamsormadup] - samtools_convert[samtools convert] - samtools_sormadup[samtools sormadup] - samtools_sort[samtools sort] + subgraph fastq_qc + fastp[fastp] + falco[falco] + bclconvert -->|main| fastp + bclconvert -->|main| fastq_out + bclconvert -->|qc| falco + fastq_in -->|main| fastp + end - cram_out[cram] - - alignment_fastq_in -->|align_bwamem1_bamsormadup_samtools_convert,align_bwamem1_samtools_sormadup,align_bwamem1_samtools_sort| bwamem - alignment_fastq_in -->|align_bwamem2_bamsormadup_samtools_convert,align_bwamem2_samtools_sormadup,align_bwamem2_samtools_sort| bwamem2 - alignment_fastq_in -->|align_snapaligner_bamsormadup_samtools_convert,align_snapaligner_samtools_sormadup,align_snapaligner_samtools_sort| snapaligner - alignment_fastq_in -->|align_star_bamsormadup_samtools_convert,align_star_samtools_sormadup,align_star_samtools_sort| star - alignment_fastq_in -->|align_bowtie2_bamsormadup_samtools_convert,align_bowtie2_samtools_sormadup,align_bowtie2_samtools_sort| bowtie2 - alignment_fastq_in -->|align_dragen_bamsormadup_samtools_convert,align_dragen_samtools_sormadup,align_dragen_samtools_sort| dragen - alignment_fastq_in -->|align_strobealigner_bamsormadup_samtools_convert,align_strobealigner_samtools_sormadup,align_strobealigner_samtools_sort| strobealigner - - bwamem -->|align_bwamem1_bamsormadup_samtools_convert| bamsormadup - bwamem2 -->|align_bwamem2_bamsormadup_samtools_convert| bamsormadup - snapaligner -->|align_snapaligner_bamsormadup_samtools_convert| bamsormadup - star -->|align_star_bamsormadup_samtools_convert| bamsormadup - bowtie2 -->|align_bowtie2_bamsormadup_samtools_convert| bamsormadup - dragen -->|align_dragen_bamsormadup_samtools_convert| bamsormadup - strobealigner -->|align_strobealigner_bamsormadup_samtools_convert| bamsormadup - - bamsormadup -->|align_bwamem1_bamsormadup_samtools_convert| samtools_convert - bamsormadup -->|align_bwamem2_bamsormadup_samtools_convert| samtools_convert - bamsormadup -->|align_snapaligner_bamsormadup_samtools_convert| samtools_convert - bamsormadup -->|align_star_bamsormadup_samtools_convert| samtools_convert - bamsormadup -->|align_bowtie2_bamsormadup_samtools_convert| samtools_convert - bamsormadup -->|align_dragen_bamsormadup_samtools_convert| samtools_convert - bamsormadup -->|align_strobealigner_bamsormadup_samtools_convert| samtools_convert - - bwamem -->|align_bwamem1_samtools_sormadup| samtools_sormadup - bwamem2 -->|align_bwamem2_samtools_sormadup| samtools_sormadup - snapaligner -->|align_snapaligner_samtools_sormadup| samtools_sormadup - star -->|align_star_samtools_sormadup| samtools_sormadup - bowtie2 -->|align_bowtie2_samtools_sormadup| samtools_sormadup - dragen -->|align_dragen_samtools_sormadup| samtools_sormadup - strobealigner -->|align_strobealigner_samtools_sormadup| samtools_sormadup - - bwamem -->|align_bwamem1_samtools_sort| samtools_sort - bwamem2 -->|align_bwamem2_samtools_sort| samtools_sort - snapaligner -->|align_snapaligner_samtools_sort| samtools_sort - star -->|align_star_samtools_sort| samtools_sort - bowtie2 -->|align_bowtie2_samtools_sort| samtools_sort - dragen -->|align_dragen_samtools_sort| samtools_sort - strobealigner -->|align_strobealigner_samtools_sort| samtools_sort - - samtools_convert -->|align_bwamem1_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_bwamem1_samtools_sormadup| cram_out - samtools_sort -->|align_bwamem1_samtools_sort| cram_out - - samtools_convert -->|align_bwamem2_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_bwamem2_samtools_sormadup| cram_out - samtools_sort -->|align_bwamem2_samtools_sort| cram_out - - samtools_convert -->|align_snapaligner_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_snapaligner_samtools_sormadup| cram_out - samtools_sort -->|align_snapaligner_samtools_sort| cram_out - - samtools_convert -->|align_star_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_star_samtools_sormadup| cram_out - samtools_sort -->|align_star_samtools_sort| cram_out - - samtools_convert -->|align_bowtie2_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_bowtie2_samtools_sormadup| cram_out - samtools_sort -->|align_bowtie2_samtools_sort| cram_out - - samtools_convert -->|align_dragen_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_dragen_samtools_sormadup| cram_out - samtools_sort -->|align_dragen_samtools_sort| cram_out - - samtools_convert -->|align_strobealigner_bamsormadup_samtools_convert| cram_out - samtools_sormadup -->|align_strobealigner_samtools_sormadup| cram_out - samtools_sort -->|align_strobealigner_samtools_sort| cram_out + subgraph alignment_dna + bwamem[BWA-MEM] + bwamem2[BWA-MEM2] + dragmap[Dragmap] + snapaligner[SNAP] + strobealign[StrobeAlign] + _dna_bam_out[] + + fastp -->|align_dna| bwamem + fastp -->|align_dna| bwamem2 + fastp -->|align_dna| dragmap + fastp -->|align_dna| snapaligner + fastp -->|align_dna| strobealign + end + subgraph alignment_rna + star[STAR] + _rna_bam_out[] + + fastp -->|align_rna| star end - subgraph coverage_qc [Coverage QC] - coverage_qc_in[] - mosdepth[mosdepth] - samtools_coverage[samtools coverage] - panelcoverage[Panel Coverage] - coverage_qc_reports_out[Coverage Reports] + subgraph alignment_postprocessing + _postprocess_bam_in[] + bamsormadup[bamsormadup] + samtools_sort[samtools sort] + samtools_sormadup[samtools sormadup] + samtools_convert[samtools convert] + + bwamem -->|align_postprocessing| _postprocess_bam_in + bwamem2 -->|align_postprocessing| _postprocess_bam_in + dragmap -->|align_postprocessing| _postprocess_bam_in + snapaligner -->|align_postprocessing| _postprocess_bam_in + strobealign -->|align_postprocessing| _postprocess_bam_in + star -->|align_postprocessing| _postprocess_bam_in - coverage_qc_in -->|coverage| mosdepth - coverage_qc_in -->|coverage| samtools_coverage - coverage_qc_in -->|coverage| panelcoverage + _postprocess_bam_in -->|align_postprocessing| bamsormadup + _postprocess_bam_in -->|align_postprocessing| samtools_sort + _postprocess_bam_in -->|align_postprocessing| samtools_sormadup + _postprocess_bam_in -->|align_postprocessing| samtools_convert - mosdepth -->|coverage| coverage_qc_reports_out - samtools_coverage -->|coverage| coverage_qc_reports_out - panelcoverage -->|coverage| coverage_qc_reports_out + bamsormadup -->|align_postprocessing| samtools_convert + samtools_convert -->|align_postprocessing| cram_out + samtools_sort -->|align_postprocessing| cram_out + samtools_sormadup -->|align_postprocessing| cram_out end - subgraph bam_qc [BAM QC] - bam_qc_in[] - samtools_stats[samtools stats] + subgraph alignment_qc + %%metro direction: TB samtools_flagstat[samtools flagstat] + samtools_stats[samtools stats] samtools_idxstats[samtools idxstats] - picard_multiplemetrics[picard CollectMultipleMetrics] - picard_hsmetrics[picard CollectHsMetrics] - picard_wgsmetrics[picard CollectWgsMetrics] - bam_qc_reports_out[QC Reports] - - bam_qc_in -->|bam_qc_roi,bam_qc_wgs| samtools_stats - bam_qc_in -->|bam_qc_roi,bam_qc_wgs| samtools_flagstat - bam_qc_in -->|bam_qc_roi,bam_qc_wgs| samtools_idxstats - bam_qc_in -->|bam_qc_roi,bam_qc_wgs| picard_multiplemetrics - bam_qc_in -->|bam_qc_roi| picard_hsmetrics - bam_qc_in -->|bam_qc_wgs| picard_wgsmetrics - - samtools_stats -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out - samtools_flagstat -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out - samtools_idxstats -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out - picard_multiplemetrics -->|bam_qc_roi,bam_qc_wgs| bam_qc_reports_out - picard_hsmetrics -->|bam_qc_roi| bam_qc_reports_out - picard_wgsmetrics -->|bam_qc_wgs| bam_qc_reports_out - end + picard_collectmultiplemetrics[picard collectmultiplemetrics] - md5sum[md5sum] - multiqc_main[Main MultiQC] - multiqc_library[Library MultiQC] - - fastq_in -->|main| alignment_fastq_in - demultiplex_out -->|main| alignment_fastq_in - cram_out -->|main| coverage_qc_in - cram_out -->|main| bam_qc_in - cram_out -->|main| md5sum - sav_out -->|main| multiqc_main - coverage_qc_reports_out -->|main| multiqc_library - bam_qc_reports_out -->|main| multiqc_library + cram_out -->|qc| samtools_flagstat + cram_out -->|qc| samtools_stats + cram_out -->|qc| samtools_idxstats + cram_out -->|qc| picard_collectmultiplemetrics + end + + subgraph alignment_qc_wgs + picard_collectwgsmetrics[picard collectwgsmetrics] + cram_out -->|qc| picard_collectwgsmetrics + end + + subgraph alignment_qc_targetted + picard_collecthsmetrics[picard collecthsmetrics] + cram_out -->|qc| picard_collecthsmetrics + end + + subgraph coverage_qc + mosdepth[mosdepth] + samtools_coverage[samtools coverage] + panelcoverage[panelcoverage] + + cram_out -->|qc| mosdepth + cram_out -->|qc| samtools_coverage + cram_out -->|qc| panelcoverage + end + + subgraph reporting + mqc_sav[MultiQC-SAV] + mqc_library[Library MultiQC] + reports_out[QC Reports] + + bclconvert -->|qc| mqc_sav + fastp -->|qc| mqc_library + falco -->|qc| mqc_library + samtools_flagstat -->|qc| mqc_library + samtools_stats -->|qc| mqc_library + samtools_idxstats -->|qc| mqc_library + picard_collectmultiplemetrics -->|qc| mqc_library + picard_collectwgsmetrics -->|qc| mqc_library + picard_collecthsmetrics -->|qc| mqc_library + mosdepth -->|qc| mqc_library + samtools_coverage -->|qc| mqc_library + panelcoverage -->|qc| mqc_library + + mqc_sav -->|qc| reports_out + mqc_library -->|qc| reports_out + end diff --git a/docs/workflow-dark.svg b/docs/workflow-dark.svg index d1416d01..621e5caa 100644 --- a/docs/workflow-dark.svg +++ b/docs/workflow-dark.svg @@ -1,271 +1,264 @@ + width="1989" height="1052" viewBox="0 0 1989 1052"> - - + + 1 -Basecalling & Demultiplexing - - -2 -Genome Alignment - - -3 -Coverage QC - - -4 -BAM QC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BCL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -FASTQ -md5sum -Main MultiQC -Library MultiQC -fastq_in -BCL -alignment_fastq_in -coverage_qc_in -bam_qc_in -bcl-convert -bwa mem -bwa mem2 -snap-aligner -star -bowtie2 -dragen -strobe-align -samtools stats -mosdepth -samtools flagstat -samtools coverage -samtools idxstats -Panel Coverage -picard CollectWgsMetrics -picard CollectMultipleMetrics -picard CollectHsMetrics -MultiQC-SAV -Fastq -biobambam bamsormadup -samtools sormadup -samtools sort -Coverage Reports -QC Reports -SAV -samtools convert -cram - - - -Main - -Demultiplexing - -Aligner: BWA MEM, Markdup: Biobambam Bamsormadup - -Aligner: BWA MEM2, Markdup: Biobambam Bamsormadup - -Aligner: Snap-aligner, Markdup: Biobambam Bamsormadup - -Aligner: STAR, Markdup: Biobambam Bamsormadup - -Aligner: Bowtie2, Markdup: Biobambam Bamsormadup - -Aligner: Dragen, Markdup: Biobambam Bamsormadup - -Aligner: Strobe-aligner, Markdup: Biobambam Bamsormadup - -Aligner: BWA MEM, Markdup: SAMtools Sormadup - -Aligner: BWA MEM2, Markdup: SAMtools Sormadup - -Aligner: Snap-aligner, Markdup: SAMtools Sormadup - -Aligner: STAR, Markdup: SAMtools Sormadup - -Aligner: Bowtie2, Markdup: SAMtools Sormadup - -Aligner: Dragen, Markdup: SAMtools Sormadup - -Aligner: Strobe-aligner, Markdup: SAMtools Sormadup - -Aligner: BWA MEM, Markdup: SAMtools Sort - -Aligner: BWA MEM2, Markdup: SAMtools Sort - -Aligner: Snap-aligner, Markdup: SAMtools Sort - -Aligner: STAR, Markdup: SAMtools Sort - -Aligner: Bowtie2, Markdup: SAMtools Sort - -Aligner: Dragen, Markdup: SAMtools Sort - -Aligner: Strobe-aligner, Markdup: SAMtools Sort - -Coverage QC - -BAM QC - ROI - -BAM QC - WGS -created with nf-metro v0.3.0 +demultiplexing + + +2 +fastq_qc + + +3 +alignment_dna + + +4 +alignment_rna + + +5 +alignment_postprocessing + + +6 +alignment_qc + + +7 +alignment_qc_wgs + + +8 +alignment_qc_targetted + + +9 +coverage_qc + + +10 +reporting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BCL + + + + + + + +FASTQ + + + + +FASTQ + + + + + + + + + + + + + + +CRAM + + + + + + + + + + + + + + + +HTML +BCL +fastq_in +MultiQC-SAV +Library MultiQC +falco +BWA-MEM +STAR +samtools flagstat +picard collectwgsmetrics +picard collecthsmetrics +mosdepth +fastq_out +BWA-MEM2 +samtools stats +samtools coverage +Dragmap +samtools idxstats +panelcoverage +SNAP +picard collectmultiplemetrics +StrobeAlign +bcl-convert +fastp +bamsormadup +samtools sort +QC Reports +samtools sormadup +samtools convert +cram_out + + + +Main + +RNA Alignment + +DNA Alignment + +Alignment Postprocessing + +Quality Control +created with nf-metro v0.4.4 From 8d6af7f16bb4f7e022f241c50f47ab5887c4ddca Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:23:15 +0100 Subject: [PATCH 04/24] fix bclconvert config --- conf/modules.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/modules.config b/conf/modules.config index 0c65d04c..f105629f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -13,7 +13,7 @@ process { // BCL convert - withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' { + withName: '.*BCLCONVERT' { cpus = 16 memory = { 64.GB * task.attempt } ext.args = { From 80aab01d418650440383bbf8f1e0995786e604bf Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Wed, 25 Feb 2026 08:52:00 +0100 Subject: [PATCH 05/24] add demux logging --- workflows/preprocessing.nf | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf index e402edc9..f701ddc6 100644 --- a/workflows/preprocessing.nf +++ b/workflows/preprocessing.nf @@ -77,12 +77,17 @@ workflow PREPROCESSING { BCLCONVERT.out.logs, ) - generateReadgroup( - BCLCONVERT.out.reports.map { meta, reports -> - return [meta, reports.find { report -> report.name == "fastq_list.csv" }] - }, - BCLCONVERT.out.fastq, - ).map { meta, fastq -> [meta.readgroup.SM, meta, fastq] }.set { ch_demultiplexed_fastq } + ch_fastq_with_meta = ch_fastq_with_meta.mix( + generateReadgroup( + BCLCONVERT.out.reports.map { meta, reports -> + return [meta, reports.find { report -> report.name == "fastq_list.csv" }] + }, + BCLCONVERT.out.fastq, + ) + ) + ch_fastq_with_meta.dump(tag: "DEMULTIPLEX: fastq with meta", pretty: true) + + ch_fastq_with_meta.map { meta, fastq -> [meta.readgroup.SM, meta, fastq] }.set { ch_demultiplexed_fastq } ch_illumina_flowcell.info .flatten() From d986365dc5f702d8c5b671a7e5c3642c045fe800 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Wed, 25 Feb 2026 08:55:57 +0100 Subject: [PATCH 06/24] typo --- workflows/preprocessing.nf | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf index f701ddc6..849d7272 100644 --- a/workflows/preprocessing.nf +++ b/workflows/preprocessing.nf @@ -37,8 +37,8 @@ include { getGenomeAttribute } from '../subworkflows/local/utils_nfcore_ workflow PREPROCESSING { take: ch_samplesheet // channel: samplesheet read in from --input - genomes // map: genome reference files - genelists // file: directory containing genelist bed files for coverage analysis + genomes // map: genome reference files + genelists // file: directory containing genelist bed files for coverage analysis main: ch_multiqc_files = channel.empty() @@ -77,14 +77,12 @@ workflow PREPROCESSING { BCLCONVERT.out.logs, ) - ch_fastq_with_meta = ch_fastq_with_meta.mix( - generateReadgroup( - BCLCONVERT.out.reports.map { meta, reports -> - return [meta, reports.find { report -> report.name == "fastq_list.csv" }] - }, - BCLCONVERT.out.fastq, - ) - ) + generateReadgroup( + BCLCONVERT.out.reports.map { meta, reports -> + return [meta, reports.find { report -> report.name == "fastq_list.csv" }] + }, + BCLCONVERT.out.fastq, + ).set { ch_fastq_with_meta } ch_fastq_with_meta.dump(tag: "DEMULTIPLEX: fastq with meta", pretty: true) ch_fastq_with_meta.map { meta, fastq -> [meta.readgroup.SM, meta, fastq] }.set { ch_demultiplexed_fastq } @@ -335,8 +333,7 @@ workflow PREPROCESSING { // // Collate and save software versions // - def topic_versions = channel - .topic("versions") + def topic_versions = channel.topic("versions") .distinct() .branch { entry -> versions_file: entry instanceof Path From 857ddeea8b75c844db50ad6cbfae86181e430850 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Wed, 25 Feb 2026 10:10:33 +0100 Subject: [PATCH 07/24] fix rg function --- modules/nf-core/bclconvert/main.nf | 35 +++++++++++------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/modules/nf-core/bclconvert/main.nf b/modules/nf-core/bclconvert/main.nf index 6f207277..40be3cdf 100644 --- a/modules/nf-core/bclconvert/main.nf +++ b/modules/nf-core/bclconvert/main.nf @@ -106,9 +106,9 @@ process BCLCONVERT { def generateReadgroup(ch_fastq_list_csv, ch_fastq) { return ch_fastq_list_csv - .collect() // make it a value channel - .map { meta, csv_file -> - def fastq_metadata = [] + .join(ch_fastq, by: [0]) + .map { meta, csv_file, fastq_list -> + def meta_fastq = [] csv_file .splitCsv(header: true) .each { row -> @@ -123,25 +123,16 @@ def generateReadgroup(ch_fastq_list_csv, ch_fastq) { rg.LB = row.RGLB ? row.RGLB : "" rg.PL = "ILLUMINA" - // replace the meta id with the sample name - def new_meta = [id: row.RGSM, readgroup: rg] - // Return the new meta with fastq file - fastq_metadata << [new_meta, file(row.Read1File).name] - if (row.Read2File) { - fastq_metadata << [new_meta, file(row.Read2File).name] - } + // dereference the fastq files in the csv + def fastq1 = fastq_list.find { fq -> file(fq).name == file(row.Read1File).name } + def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null + + // set fastq metadata + def new_meta = meta + [id: row.RGSM, readgroup: rg, single_end: !fastq2] + + meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] } - return [meta, fastq_metadata] - } - .join(ch_fastq, by:[0]) // -> [ meta, [fq_meta, fastq_filename], [fastq_file, ...] ] - .transpose(by:[2]) // -> [ meta, [fq_meta, fastq_filename], fastq_file ] - .map { meta, fastq_metadata, fastq_file -> - def fastq_meta = fastq_metadata.find { _meta, filename -> filename == file(fastq_file).name } - return [meta + fastq_meta[0], file(fastq_file)] - } - .groupTuple(by: [0]) - .map { meta, fastq -> - meta.single_end = fastq.size() == 1 - return [meta, fastq.flatten()] + return meta_fastq } + .flatMap() } From 773d3d7cc487f17fd721eaa0b61ab798294ea43a Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Wed, 25 Feb 2026 10:11:51 +0100 Subject: [PATCH 08/24] fix rg function --- modules.json | 5 ++- modules/nf-core/bclconvert/bclconvert.diff | 51 ++++++++++++++++++++++ modules/nf-core/bclconvert/main.nf | 2 +- 3 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 modules/nf-core/bclconvert/bclconvert.diff diff --git a/modules.json b/modules.json index 7a04dbc8..6d2aefc7 100644 --- a/modules.json +++ b/modules.json @@ -7,8 +7,9 @@ "nf-core": { "bclconvert": { "branch": "master", - "git_sha": "547b6a0078c2f4499b64d59edb8ae038b31971b2", - "installed_by": ["modules"] + "git_sha": "18e1a9566d76569b8a40dc60184d4eb7413cf6e1", + "installed_by": ["modules"], + "patch": "modules/nf-core/bclconvert/bclconvert.diff" }, "biobambam/bamsormadup": { "branch": "master", diff --git a/modules/nf-core/bclconvert/bclconvert.diff b/modules/nf-core/bclconvert/bclconvert.diff new file mode 100644 index 00000000..e27cb946 --- /dev/null +++ b/modules/nf-core/bclconvert/bclconvert.diff @@ -0,0 +1,51 @@ +Changes in component 'nf-core/bclconvert' +'modules/nf-core/bclconvert/LICENSE' is unchanged +'modules/nf-core/bclconvert/Dockerfile' is unchanged +'modules/nf-core/bclconvert/README.md' is unchanged +'modules/nf-core/bclconvert/.gitignore' is unchanged +'modules/nf-core/bclconvert/meta.yml' is unchanged +Changes in 'bclconvert/main.nf': +--- modules/nf-core/bclconvert/main.nf ++++ modules/nf-core/bclconvert/main.nf +@@ -103,3 +103,36 @@ + echo "fake InterOp file" > output/InterOp/TileMetricsOut.bin + """ + } ++ ++def generateReadgroup(ch_fastq_list_csv, ch_fastq) { ++ return ch_fastq_list_csv ++ .join(ch_fastq, by: [0]) ++ .map { meta, csv_file, fastq_list -> ++ def meta_fastq = [] ++ csv_file ++ .splitCsv(header: true) ++ .each { row -> ++ // Create the readgroup tuple ++ // RGID,RGSM,RGLB,Lane,Read1File,Read2File ++ def rg = [:] ++ // row.RGID is index1.index2.lane ++ rg.ID = row.RGID ++ // RGPU is a custom column in the samplesheet containing the flowcell ID ++ rg.PU = row.RGPU ? row.RGPU : meta.id + "." + row.Lane ++ rg.SM = row.RGSM ++ rg.LB = row.RGLB ? row.RGLB : "" ++ rg.PL = "ILLUMINA" ++ ++ // dereference the fastq files in the csv ++ def fastq1 = fastq_list.find { fq -> file(fq).name == file(row.Read1File).name } ++ def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null ++ ++ // set fastq metadata ++ def new_meta = meta + [id: row.RGSM, readgroup: rg, single_end: !fastq2] ++ ++ meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] ++ } ++ return meta_fastq ++ } ++ .flatMap() ++} + +'modules/nf-core/bclconvert/tests/main.nf.test.snap' is unchanged +'modules/nf-core/bclconvert/tests/nextflow.config' is unchanged +'modules/nf-core/bclconvert/tests/main.nf.test' is unchanged +************************************************************ diff --git a/modules/nf-core/bclconvert/main.nf b/modules/nf-core/bclconvert/main.nf index 40be3cdf..1e79e24c 100644 --- a/modules/nf-core/bclconvert/main.nf +++ b/modules/nf-core/bclconvert/main.nf @@ -1,5 +1,5 @@ process BCLCONVERT { - tag { "${meta.lane}" ? "${meta.id}" + "." + "${meta.lane}" : "${meta.id}" } + tag "${ meta.lane ? meta.id + "." + meta.lane : meta.id }" label 'process_high' container "nf-core/bclconvert:4.4.6" From d85af27f17cf9f9b27044b517fe4401ccddf2201 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Wed, 25 Feb 2026 10:23:44 +0100 Subject: [PATCH 09/24] catch library from sampleinfo if applicable --- workflows/preprocessing.nf | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf index 849d7272..225c1ba4 100644 --- a/workflows/preprocessing.nf +++ b/workflows/preprocessing.nf @@ -97,7 +97,12 @@ workflow PREPROCESSING { ch_demultiplexed_fastq .combine(ch_sampleinfo, by: 0) .map { _samplename, meta, fastq, sampleinfo -> - def new_meta = meta + sampleinfo + if (sampleinfo.library) { + new_rg = meta.readgroup + ['LB': sampleinfo.library] + } else { + new_rg = meta.readgroup + } + def new_meta = meta + sampleinfo + ['readgroup': new_rg] return [new_meta, fastq] } .groupTuple(by: [0]) From 28350ca6bc7530beeeedc087693d38b63bb44495 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:40:09 +0100 Subject: [PATCH 10/24] fix bclconvert meta.id --- modules/nf-core/bclconvert/bclconvert.diff | 2 +- modules/nf-core/bclconvert/main.nf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/nf-core/bclconvert/bclconvert.diff b/modules/nf-core/bclconvert/bclconvert.diff index e27cb946..e850ef91 100644 --- a/modules/nf-core/bclconvert/bclconvert.diff +++ b/modules/nf-core/bclconvert/bclconvert.diff @@ -36,7 +36,7 @@ Changes in 'bclconvert/main.nf': + def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null + + // set fastq metadata -+ def new_meta = meta + [id: row.RGSM, readgroup: rg, single_end: !fastq2] ++ def new_meta = meta + [id: fastq1.getSimpleName().toString() - ~/_R[0-9]_001.*$/, readgroup: rg, single_end: !fastq2] + + meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] + } diff --git a/modules/nf-core/bclconvert/main.nf b/modules/nf-core/bclconvert/main.nf index 1e79e24c..7010ce8a 100644 --- a/modules/nf-core/bclconvert/main.nf +++ b/modules/nf-core/bclconvert/main.nf @@ -128,7 +128,7 @@ def generateReadgroup(ch_fastq_list_csv, ch_fastq) { def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null // set fastq metadata - def new_meta = meta + [id: row.RGSM, readgroup: rg, single_end: !fastq2] + def new_meta = meta + [id: fastq1.getSimpleName().toString() - ~/_R[0-9]_001.*$/, readgroup: rg, single_end: !fastq2] meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] } From ba9f85606de928ceaf94be66bf1019c8ac32c36f Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:33:01 +0100 Subject: [PATCH 11/24] add cgroup metrics plugin --- nextflow.config | 1 + 1 file changed, 1 insertion(+) diff --git a/nextflow.config b/nextflow.config index a5ceb27d..1a8c1156 100644 --- a/nextflow.config +++ b/nextflow.config @@ -269,6 +269,7 @@ manifest { // Nextflow plugins plugins { id 'nf-schema@2.6.1' + id 'nf-cgroup-metrics@1.0.0' } validation { From 252bf444a9f36a2f1ea87cc1f8221960142bf0cb Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:54:05 +0100 Subject: [PATCH 12/24] Remove nf-cgroup-metrics plugin from config --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 1a8c1156..a5ceb27d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -269,7 +269,6 @@ manifest { // Nextflow plugins plugins { id 'nf-schema@2.6.1' - id 'nf-cgroup-metrics@1.0.0' } validation { From ccb4c57662e136374da8f82580919678aa58f251 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 5 Mar 2026 14:24:15 +0100 Subject: [PATCH 13/24] Feat: MultiQC SAV (#160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add mqc_sav module * fix bclconvert config * add demux logging * typo * fix rg function * fix rg function * catch library from sampleinfo if applicable * fix bclconvert meta.id * add cgroup metrics plugin * Remove nf-cgroup-metrics plugin from config * update multiqcsav and multiqc * mv rg function to lib * add mqcsav and fix plumbing * changelog * fix syntax error * Replace lib with function in subwf to please linter * update test config, fix issues * ditch conda from CI and update docs a little * fix file staging * fix linting * tinkering with configs * fix nf-test profiles * more work * linting * mqc_sav attempt #1 * Refactor MultiQC summary file handling and improve metadata management * fix test samplesheet * bump mqc_cmgg container * fix mqc output path * update modules + patch * fix multi-lane processing * fix SAV titleé * fix outputs and patch module * fix snap config process selector * set version to 3.0.0 * final fixed for multilane run qc (hopefully) * fix mqc inputs * move bclconvert rg function to subwf * fix final tests * let's hope we're done now... * fix main wf errors * fix tests (again) * test error * f*ck it * f*ck it --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/actions/nf-test/action.yml | 10 - .github/workflows/clean-up.yml | 6 +- .github/workflows/nf-test.yml | 6 +- .gitignore | 1 + .nf-core.yml | 2 +- CHANGELOG.md | 2 + README.md | 1 - assets/multiqc_config.yml | 3 +- conf/modules.config | 26 +-- conf/test.config | 12 +- docs/usage.md | 40 ++-- main.nf | 162 ++++++------- modules.json | 26 ++- modules/nf-core/bclconvert/bclconvert.diff | 51 ---- modules/nf-core/bclconvert/main.nf | 37 +-- modules/nf-core/bclconvert/meta.yml | 8 +- modules/nf-core/bclconvert/tests/main.nf.test | 8 +- .../bclconvert/tests/main.nf.test.snap | 50 +--- modules/nf-core/bowtie2/align/main.nf | 2 + .../bowtie2/align/tests/main.nf.test.snap | 28 +-- modules/nf-core/bwamem2/mem/bwamem2-mem.diff | 8 +- modules/nf-core/bwamem2/mem/main.nf | 47 ++-- modules/nf-core/bwamem2/mem/meta.yml | 19 ++ .../nf-core/bwamem2/mem/tests/main.nf.test | 8 +- .../bwamem2/mem/tests/main.nf.test.snap | 109 ++++----- modules/nf-core/multiqc/main.nf | 28 +-- modules/nf-core/multiqc/meta.yml | 128 +++++----- modules/nf-core/multiqc/multiqc.diff | 27 --- modules/nf-core/multiqc/tests/main.nf.test | 129 +++++++---- .../nf-core/multiqc/tests/main.nf.test.snap | 109 +++++++-- modules/nf-core/multiqcsav/environment.yml | 13 ++ modules/nf-core/multiqcsav/main.nf | 53 +++++ modules/nf-core/multiqcsav/meta.yml | 139 +++++++++++ modules/nf-core/multiqcsav/tests/main.nf.test | 136 +++++++++++ .../multiqcsav/tests/main.nf.test.snap | 96 ++++++++ .../nf-core/picard/collecthsmetrics/main.nf | 40 ++-- .../nf-core/picard/collecthsmetrics/meta.yml | 4 +- .../picard-collecthsmetrics.diff | 27 +-- .../collecthsmetrics/tests/main.nf.test | 25 +- .../collecthsmetrics/tests/main.nf.test.snap | 44 ++-- .../picard/collectmultiplemetrics/main.nf | 27 +-- .../picard/collectmultiplemetrics/meta.yml | 4 +- .../picard-collectmultiplemetrics.diff | 28 +-- .../collectmultiplemetrics/tests/main.nf.test | 144 +++++++++--- .../tests/main.nf.test.snap | 156 ++++++++++++- .../nf-core/picard/collectwgsmetrics/main.nf | 30 +-- .../nf-core/picard/collectwgsmetrics/meta.yml | 5 +- .../picard-collectwgsmetrics.diff | 22 +- .../collectwgsmetrics/tests/main.nf.test | 119 +++++++--- .../collectwgsmetrics/tests/main.nf.test.snap | 74 +++++- modules/nf-core/star/align/meta.yml | 6 - modules/nf-core/star/align/star-align.diff | 20 +- modules/nf-core/star/align/tests/main.nf.test | 20 -- nextflow.config | 12 +- nf-test.config | 2 +- ro-crate-metadata.json | 36 +-- .../main.nf | 95 ++++++++ .../meta.yml | 0 .../fastq_align_dna/fastq_align_dna.diff | 6 +- tests/config/igenomes_test.config | 9 - tests/config/nf-test.config | 9 - tests/default.nf.test | 36 +-- tests/inputs/fastq.yml | 22 -- tests/inputs/fastq_rna.yml | 24 -- tests/inputs/flowcell.yml | 6 - tests/inputs/test.yml | 51 ++++ tests/workflows/preprocessing.nf.test | 129 +++++++++-- tests/workflows/preprocessing.nf.test.snap | 187 +++++++++++---- workflows/preprocessing.nf | 218 +++++++----------- 70 files changed, 1999 insertions(+), 1170 deletions(-) delete mode 100644 modules/nf-core/bclconvert/bclconvert.diff delete mode 100644 modules/nf-core/multiqc/multiqc.diff create mode 100644 modules/nf-core/multiqcsav/environment.yml create mode 100644 modules/nf-core/multiqcsav/main.nf create mode 100644 modules/nf-core/multiqcsav/meta.yml create mode 100644 modules/nf-core/multiqcsav/tests/main.nf.test create mode 100644 modules/nf-core/multiqcsav/tests/main.nf.test.snap create mode 100644 subworkflows/local/utils_nfcmgg_preprocessing_pipeline/main.nf create mode 100644 subworkflows/local/utils_nfcmgg_preprocessing_pipeline/meta.yml delete mode 100644 tests/inputs/fastq.yml delete mode 100644 tests/inputs/fastq_rna.yml delete mode 100644 tests/inputs/flowcell.yml create mode 100644 tests/inputs/test.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e84f2948..d0f648f7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -36,6 +36,6 @@ body: * Nextflow version _(eg. 23.04.0)_ * Hardware _(eg. HPC, Desktop, Cloud)_ * Executor _(eg. slurm, local, awsbatch)_ - * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, or Apptainer)_ + * Container engine: _(e.g. Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer)_ * OS _(eg. CentOS Linux, macOS, Linux Mint)_ * Version of nf-cmgg/preprocessing _(eg. 1.1, 1.5, 1.8.2)_ diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml index 3b9724c7..9c844d5a 100644 --- a/.github/actions/nf-test/action.yml +++ b/.github/actions/nf-test/action.yml @@ -46,16 +46,6 @@ runs: mkdir -p $NXF_SINGULARITY_CACHEDIR mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - name: Conda setup - if: contains(inputs.profile, 'conda') - uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3 - with: - auto-update-conda: true - conda-solver: libmamba - channels: conda-forge - channel-priority: strict - conda-remove-defaults: true - - name: Run nf-test shell: bash env: diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 6adb0fff..587faa0b 100644 --- a/.github/workflows/clean-up.yml +++ b/.github/workflows/clean-up.yml @@ -12,9 +12,9 @@ jobs: steps: - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10 with: - stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." - stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." - close-issue-message: "This issue was closed because it has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor and then staled for 20 days with no activity." + stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-cmgg contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." + stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-cmgg contributor. Remove stale label or add a comment if it is still useful." + close-issue-message: "This issue was closed because it has been tagged as awaiting-changes or awaiting-feedback by an nf-cmgg contributor and then staled for 20 days with no activity." days-before-stale: 30 days-before-close: 20 days-before-pr-close: -1 diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index 2288a9b9..f55b0075 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -68,13 +68,11 @@ jobs: fail-fast: false matrix: shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} - profile: [conda, docker, singularity] + profile: [docker, singularity] isMain: - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} - # Exclude conda and singularity on dev + # Exclude singularity on dev exclude: - - isMain: false - profile: "conda" - isMain: false profile: "singularity" NXF_VER: diff --git a/.gitignore b/.gitignore index 23b0c7de..980c9ac3 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ testing* *.pyc null/ .nf-test* +test_fc diff --git a/.nf-core.yml b/.nf-core.yml index e1b35ad2..d06b88e6 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -35,4 +35,4 @@ template: org: nf-cmgg outdir: . skip_features: ["fastqc"] - version: 3.0.0dev + version: 3.0.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index 18e37743..c062310d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## 3.0.0 +- Add `MultiQC-SAV` module for Illumina Run QC reports +- Migrate readgroup parsing from `preprocessing.nf` to a local subworkflow - Update pipeline to use topic channels only, deprecation `versions` channels - Drop `bcl_demultiplex` subworkflow in favour of `bcl-convert` module - Update the output handling to use the new workflow output definitions. diff --git a/README.md b/README.md index f867fbba..119479bf 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ [![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) [![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1) -[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) [![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-cmgg/preprocessing) diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index cc354c76..3b59662f 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,6 +1,5 @@ report_comment: > - This report has been generated by the nf-cmgg/preprocessing - analysis pipeline. + This report has been generated by the nf-cmgg/preprocessing analysis pipeline. report_section_order: "nf-cmgg-preprocessing-methods-description": order: -1000 diff --git a/conf/modules.config b/conf/modules.config index f105629f..becf78e8 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -104,7 +104,7 @@ process { // -xf 2 : expansion factor for reading compressed data //// SNAP - withName: '.*FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' { + withName: '.*FASTQ_ALIGN_DNA:SNAP_ALIGN' { cpus = 16 memory = 64.GB ext.args = { @@ -270,29 +270,27 @@ process { } // MultiQC - withName: '.*MULTIQC_.*$' { - container = "cmgg/multiqc_cmgg:0.0.2-multiqc-v1.33" - cpus = 1 - memory = 4.GB - } - withName: '.*MULTIQC_MAIN' { - ext.prefix = { params.multiqc_title ? params.multiqc_title : "multiqc" } + withName: '.*MULTIQCSAV' { + cpus = 1 + memory = 4.GB + ext.prefix = { params.multiqc_title ? "${params.multiqc_title}_SAV" : "${meta.id}_SAV" } ext.args = { [ - "--template \"cmgg\"", "--no-ai", - params.multiqc_title ? "--title \"${params.multiqc_title}\"" : "", + params.multiqc_title ? "--title \"${params.multiqc_title}\"" : "--title \"${meta.id}\"", ].join(" ").trim() } } - - withName: '.*MULTIQC_LIBRARY' { - ext.prefix = { meta.id ? "${meta.id}" : "multiqc_library" } + withName: '.*MULTIQC' { + container = "cmgg/multiqc_cmgg:0.0.5-multiqc-v1.33" + cpus = 1 + memory = 4.GB + ext.prefix = { params.multiqc_title ? "${params.multiqc_title}_${meta.id}" : "${meta.id}" } ext.args = { [ "--template \"cmgg\"", "--no-ai", - meta.id ? "--title \"${meta.id} - Pool Summary\"" : "", + params.multiqc_title ? "--title \"${params.multiqc_title} - ${meta.id}\"" : "--title \"${meta.id}\"", ].join(" ").trim() } } diff --git a/conf/test.config b/conf/test.config index f4ad2b2b..8b6c7486 100644 --- a/conf/test.config +++ b/conf/test.config @@ -15,7 +15,7 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - input = "${projectDir}/tests/inputs/fastq.yml" + input = "${projectDir}/tests/inputs/test.yml" igenomes_base = "s3://reference-data/genomes" } @@ -25,16 +25,6 @@ process { memory: 6.GB, time: 6.h, ] - - withName: BCLCONVERT { - ext.args = { - [ - meta.lane ? "--bcl-only-lane ${meta.lane}" : "", - "--force", - "--first-tile-only true", - ].join(" ").trim() - } - } } includeConfig "../tests/config/igenomes_test.config" diff --git a/docs/usage.md b/docs/usage.md index 1f1d72d2..32028ecd 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -51,7 +51,7 @@ Following table shows the fields that are used by the `fastq` samplesheet: | `roi` | The path to a BED file containing Regions Of Interest for coverage analysis | :x: | | `aligner` | The aligner to use for this sample. Can be one of these: bowtie2, bwamem, bwamem2, dragmap, strobe and snap. set to `false` to output fastq. | :x: | -An [example samplesheet](../tests/inputs/fastq.yml) has been provided with the pipeline. +An [example samplesheet](../tests/inputs/test.yml) has been provided with the pipeline. ### Flowcell samplesheet @@ -64,22 +64,26 @@ RUN_NAME,RUN_NAME_samplesheet.csv,RUN_NAME_sampleinfo.csv,RUN_NAME_flowcell/ Following table shows the fields that are used by the `flowcell` samplesheet: -| Column | Description | Required | -| ------------- | ------------------------------------------------------------------------------------------------------ | ------------------ | -| `samplesheet` | Illumina flowcell for the flowcell lane | :heavy_check_mark: | -| `sample_info` | CSV file with sample information. See the [flowcell sample info](#flowcell-sample-info) documentation. | :heavy_check_mark: | -| `flowcell` | Illumina flowcell directory | :heavy_check_mark: | -| `lane` | FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :x: | +| Column | Description | Required | +| ------------- | ----------------------------------------------------------------------------------------------------------- | ------------------ | +| `samplesheet` | Illumina flowcell for the flowcell lane | :heavy_check_mark: | +| `sample_info` | JSON/YML file with sample information. See the [flowcell sample info](#flowcell-sample-info) documentation. | :heavy_check_mark: | +| `flowcell` | Illumina flowcell directory | :heavy_check_mark: | +| `lane` | Lane number | :x: | -An [example samplesheet](../tests/inputs/flowcell.yml) has been provided with the pipeline. +An [example samplesheet](../tests/inputs/test.yml) has been provided with the pipeline. ### Flowcell sample info -A `flowcell` sample info CSV file consisting for one sequencing run may look something like the one below. +A `flowcell` sample info JSON/YML file consisting for one sequencing run may look something like the one below. -```csv title="sample_info.csv" -samplename,library,organism,tag -Sample1,test,Homo sapiens,WES +```json title="sample_info.json" +{ + "samplename": "Sample1", + "library": "test", + "organism": "Homo sapiens", + "tag": "WES" +} ``` Following table shows the fields that are used by the `flowcell` samplesheet: @@ -182,11 +186,7 @@ These options are part of Nextflow and use a _single_ hyphen (pipeline parameter Use this parameter to choose a configuration profile. Profiles can give configuration presets for different compute environments. -Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer, Conda) - see below. - -:::info -We highly recommend the use of Docker or Singularity containers for full pipeline reproducibility, however when this is not possible, Conda is also supported. -::: +Several generic profiles are bundled with the pipeline which instruct the pipeline to use software packaged using different methods (Docker, Singularity, Podman, Shifter, Charliecloud, Apptainer) - see below. The pipeline also dynamically loads configurations from [https://github.com/nf-core/configs](https://github.com/nf-core/configs) when it runs, making multiple config profiles for various institutional clusters available at run time. For more information and to see if your system is available in these configs please see the [nf-core/configs documentation](https://github.com/nf-core/configs#documentation). @@ -210,8 +210,6 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) -- `conda` - - A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer. ### `-resume` @@ -233,9 +231,9 @@ To change the resource requests, please see the [max resources](https://nf-co.re ### Custom Containers -In some cases you may wish to change which container or conda environment a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases you may wish to change which container a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. -To use a different container from the default container or conda environment specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. +To use a different container from the default container specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. ### Custom Tool Arguments diff --git a/main.nf b/main.nf index aed6d7b5..e2f78c8b 100644 --- a/main.nf +++ b/main.nf @@ -46,6 +46,11 @@ workflow { PIPELINE_INITIALISATION.out.samplesheet, params.genomes, params.genelists, + params.multiqc_config + ? [file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true), file(params.multiqc_config, checkIfExists: true)] + : [file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)], + params.multiqc_logo ? file(params.multiqc_logo, checkIfExists: true) : [], + params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true), ) // @@ -58,14 +63,14 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, - PREPROCESSING.out.multiqc_main_report, + PREPROCESSING.out.multiqc_report, ) publish: - demultiplex_interop = PREPROCESSING.out.demultiplex_interop.transpose(by: 1) - demultiplex_reports = PREPROCESSING.out.demultiplex_reports.transpose(by: 1) - demultiplex_logs = PREPROCESSING.out.demultiplex_logs.transpose(by: 1) + demultiplex_reports = PREPROCESSING.out.demultiplex_reports.transpose() + demultiplex_logs = PREPROCESSING.out.demultiplex_logs.transpose() demultiplex_fastq = PREPROCESSING.out.demultiplex_fastq.transpose() + demultiplex_interop = PREPROCESSING.out.demultiplex_interop.transpose() falco_html = PREPROCESSING.out.falco_html falco_txt = PREPROCESSING.out.falco_txt fastp_json = PREPROCESSING.out.fastp_json @@ -97,242 +102,211 @@ workflow { picard_wgsmetrics = PREPROCESSING.out.picard_wgsmetrics picard_hsmetrics = PREPROCESSING.out.picard_hsmetrics md5sums = PREPROCESSING.out.md5sums - multiqc_main_report = PREPROCESSING.out.multiqc_main_report - multiqc_main_data = PREPROCESSING.out.multiqc_main_data - multiqc_main_plots = PREPROCESSING.out.multiqc_main_plots - multiqc_library_report = PREPROCESSING.out.multiqc_library_report - multiqc_library_data = PREPROCESSING.out.multiqc_library_data - multiqc_library_plots = PREPROCESSING.out.multiqc_library_plots + multiqc_report = PREPROCESSING.out.multiqc_report + multiqc_data = PREPROCESSING.out.multiqc_data + multiqc_plots = PREPROCESSING.out.multiqc_plots + multiqcsav_report = PREPROCESSING.out.multiqcsav_report + multiqcsav_data = PREPROCESSING.out.multiqcsav_data + multiqcsav_plots = PREPROCESSING.out.multiqcsav_plots } output { - demultiplex_interop { - path { _meta, bin -> - bin >> "Interop/${bin.name}" - } - } demultiplex_reports { path { meta, report -> - def out_path = meta.lane ? "Reports/L00${meta.lane}/${report.name}" as String : "Reports/${report.name}" - report >> out_path + report >> (meta.lane ? "Reports/L00${meta.lane}/${report.name}" : "Reports/${report.name}") } } demultiplex_logs { path { meta, log -> - def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}" - log >> out_path + log >> (meta.lane ? "Logs/L00${meta.lane}/${log.name}" : "Logs/${log.name}") } } + demultiplex_interop { + path "InterOp/" + } demultiplex_fastq { path { meta, fastq -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${fastq.name}" as String : "${meta.samplename}/${fastq.name}" - fastq >> out_path + fastq >> (meta.library ? "${meta.library}/${meta.samplename}/${fastq.name}" : "${meta.samplename}/${fastq.name}") } } falco_html { path { meta, html -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${html.name}" as String : "${meta.samplename}/${html.name}" - html >> out_path + html >> (meta.library ? "${meta.library}/${meta.samplename}/${html.name}" : "${meta.samplename}/${html.name}") } } falco_txt { path { meta, txt -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${txt.name}" as String : "${meta.samplename}/${txt.name}" - txt >> out_path + txt >> (meta.library ? "${meta.library}/${meta.samplename}/${txt.name}" : "${meta.samplename}/${txt.name}") } } fastp_json { path { meta, json -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${json.name}" as String : "${meta.samplename}/${json.name}" - json >> out_path + json >> (meta.library ? "${meta.library}/${meta.samplename}/${json.name}" : "${meta.samplename}/${json.name}") } } fastp_html { path { meta, html -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${html.name}" as String : "${meta.samplename}/${html.name}" - html >> out_path + html >> (meta.library ? "${meta.library}/${meta.samplename}/${html.name}" : "${meta.samplename}/${html.name}") } } crams { path { meta, cram, crai -> - def out_cram = meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.cram" as String : "${meta.samplename}/${meta.samplename}.cram" - def out_crai = meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.cram.crai" as String : "${meta.samplename}/${meta.samplename}.cram.crai" - cram >> out_cram - crai >> out_crai + cram >> (meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.cram" : "${meta.samplename}/${meta.samplename}.cram") + crai >> (meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.cram.crai" : "${meta.samplename}/${meta.samplename}.cram.crai") } } rna_splice_junctions { path { meta, sjt -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${sjt.name}" as String : "${meta.samplename}/${sjt.name}" - sjt >> out_path + sjt >> (meta.library ? "${meta.library}/${meta.samplename}/${sjt.name}" : "${meta.samplename}/${sjt.name}") } } rna_junctions { path { meta, junctions -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${junctions.name}" as String : "${meta.samplename}/${junctions.name}" - junctions >> out_path + junctions >> (meta.library ? "${meta.library}/${meta.samplename}/${junctions.name}" : "${meta.samplename}/${junctions.name}") } } align_reports { path { meta, log -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${log.name}" as String : "${meta.samplename}/${log.name}" - log >> out_path + log >> (meta.library ? "${meta.library}/${meta.samplename}/${log.name}" : "${meta.samplename}/${log.name}") } } sormadup_metrics { path { meta, metrics -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.duplicate_metrics.txt" as String : "${meta.samplename}/${meta.samplename}.duplicate_metrics.txt" - metrics >> out_path + metrics >> (meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.duplicate_metrics.txt" : "${meta.samplename}/${meta.samplename}.duplicate_metrics.txt") } } mosdepth_global { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_summary { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_regions { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_per_base_d4 { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_per_base_bed { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_per_base_csi { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_regions_bed { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_regions_csi { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_quantized_bed { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_quantized_csi { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_thresholds_bed { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } mosdepth_thresholds_csi { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } samtools_coverage { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } panelcoverage { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } samtools_stats { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } samtools_flagstat { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } samtools_idxstats { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } picard_multiplemetrics { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } picard_multiplemetrics_pdf { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } picard_wgsmetrics { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } picard_hsmetrics { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } md5sums { path { meta, _file -> - def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/" - return out_path + return (meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/") } } - multiqc_main_report { + multiqcsav_report { path "multiqc/" } - multiqc_main_data { + multiqcsav_data { path "multiqc/" } - multiqc_main_plots { + multiqcsav_plots { path "multiqc/" } - multiqc_library_report { - path "multiqc/" + multiqc_report { + path { meta, _file -> + return (meta.id ? "${meta.id}/multiqc/" : "multiqc/") + } } - multiqc_library_data { - path "multiqc/" + multiqc_data { + path { meta, _file -> + return (meta.id ? "${meta.id}/multiqc/" : "multiqc/") + } } - multiqc_library_plots { - path "multiqc/" + multiqc_plots { + path { meta, _file -> + return (meta.id ? "${meta.id}/multiqc/" : "multiqc/") + } } } diff --git a/modules.json b/modules.json index 6d2aefc7..410a4a68 100644 --- a/modules.json +++ b/modules.json @@ -7,9 +7,8 @@ "nf-core": { "bclconvert": { "branch": "master", - "git_sha": "18e1a9566d76569b8a40dc60184d4eb7413cf6e1", - "installed_by": ["modules"], - "patch": "modules/nf-core/bclconvert/bclconvert.diff" + "git_sha": "e4a7e011bee58ded839f4da6bf9bb3fbfbebdebd", + "installed_by": ["modules"] }, "biobambam/bamsormadup": { "branch": "master", @@ -19,7 +18,7 @@ }, "bowtie2/align": { "branch": "master", - "git_sha": "ab146e7909edbf6dcc6459de57eef29dceb61d42", + "git_sha": "92b8df948fd8cdb223e051f5f5e414818a073ee0", "installed_by": ["fastq_align_dna", "modules"], "patch": "modules/nf-core/bowtie2/align/bowtie2-align.diff" }, @@ -31,7 +30,7 @@ }, "bwamem2/mem": { "branch": "master", - "git_sha": "5dd46a36fca68d6ad1a6b22ec47adc8c6863717d", + "git_sha": "8325a8155a77a336a613a504b8e4d6cea7a2344a", "installed_by": ["fastq_align_dna"], "patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff" }, @@ -69,25 +68,30 @@ }, "multiqc": { "branch": "master", - "git_sha": "575e1a4b51a9bad7a8cd1316a88fb85684ef7c7b", + "git_sha": "2c73cc8fa92cf48de3da0b643fdf357a8a290b36", "installed_by": ["modules"], "patch": "modules/nf-core/multiqc/multiqc.diff" }, + "multiqcsav": { + "branch": "master", + "git_sha": "2c73cc8fa92cf48de3da0b643fdf357a8a290b36", + "installed_by": ["modules"] + }, "picard/collecthsmetrics": { "branch": "master", - "git_sha": "976ed20e328a92cb24ab6c63a8983ed31bf48469", + "git_sha": "a631e12055f6c23ba2c942d3902b3ed1b9eed859", "installed_by": ["modules"], "patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff" }, "picard/collectmultiplemetrics": { "branch": "master", - "git_sha": "74ec93d00bef147da3fb1f2262e8d31c14108f88", + "git_sha": "a631e12055f6c23ba2c942d3902b3ed1b9eed859", "installed_by": ["modules"], "patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff" }, "picard/collectwgsmetrics": { "branch": "master", - "git_sha": "66d5808eaaabd9de8997c4c31a9e8cdd3b56c080", + "git_sha": "a631e12055f6c23ba2c942d3902b3ed1b9eed859", "installed_by": ["modules"], "patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff" }, @@ -139,7 +143,7 @@ }, "star/align": { "branch": "master", - "git_sha": "d6419d592de78e193625b209c1d0a5cc09206df3", + "git_sha": "cebe21bbd158c15c8fab172e37cfe97a239f4b77", "installed_by": ["modules"], "patch": "modules/nf-core/star/align/star-align.diff" }, @@ -155,7 +159,7 @@ "nf-core": { "fastq_align_dna": { "branch": "master", - "git_sha": "51cf05a850f58964b0d12ab92230348e567819e3", + "git_sha": "9afa0584136287aa20fc18296f45f103c0c4e69a", "installed_by": ["subworkflows"], "patch": "subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff" }, diff --git a/modules/nf-core/bclconvert/bclconvert.diff b/modules/nf-core/bclconvert/bclconvert.diff deleted file mode 100644 index e850ef91..00000000 --- a/modules/nf-core/bclconvert/bclconvert.diff +++ /dev/null @@ -1,51 +0,0 @@ -Changes in component 'nf-core/bclconvert' -'modules/nf-core/bclconvert/LICENSE' is unchanged -'modules/nf-core/bclconvert/Dockerfile' is unchanged -'modules/nf-core/bclconvert/README.md' is unchanged -'modules/nf-core/bclconvert/.gitignore' is unchanged -'modules/nf-core/bclconvert/meta.yml' is unchanged -Changes in 'bclconvert/main.nf': ---- modules/nf-core/bclconvert/main.nf -+++ modules/nf-core/bclconvert/main.nf -@@ -103,3 +103,36 @@ - echo "fake InterOp file" > output/InterOp/TileMetricsOut.bin - """ - } -+ -+def generateReadgroup(ch_fastq_list_csv, ch_fastq) { -+ return ch_fastq_list_csv -+ .join(ch_fastq, by: [0]) -+ .map { meta, csv_file, fastq_list -> -+ def meta_fastq = [] -+ csv_file -+ .splitCsv(header: true) -+ .each { row -> -+ // Create the readgroup tuple -+ // RGID,RGSM,RGLB,Lane,Read1File,Read2File -+ def rg = [:] -+ // row.RGID is index1.index2.lane -+ rg.ID = row.RGID -+ // RGPU is a custom column in the samplesheet containing the flowcell ID -+ rg.PU = row.RGPU ? row.RGPU : meta.id + "." + row.Lane -+ rg.SM = row.RGSM -+ rg.LB = row.RGLB ? row.RGLB : "" -+ rg.PL = "ILLUMINA" -+ -+ // dereference the fastq files in the csv -+ def fastq1 = fastq_list.find { fq -> file(fq).name == file(row.Read1File).name } -+ def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null -+ -+ // set fastq metadata -+ def new_meta = meta + [id: fastq1.getSimpleName().toString() - ~/_R[0-9]_001.*$/, readgroup: rg, single_end: !fastq2] -+ -+ meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] -+ } -+ return meta_fastq -+ } -+ .flatMap() -+} - -'modules/nf-core/bclconvert/tests/main.nf.test.snap' is unchanged -'modules/nf-core/bclconvert/tests/nextflow.config' is unchanged -'modules/nf-core/bclconvert/tests/main.nf.test' is unchanged -************************************************************ diff --git a/modules/nf-core/bclconvert/main.nf b/modules/nf-core/bclconvert/main.nf index 7010ce8a..1b83e5df 100644 --- a/modules/nf-core/bclconvert/main.nf +++ b/modules/nf-core/bclconvert/main.nf @@ -12,8 +12,8 @@ process BCLCONVERT { tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz"), emit: fastq_idx, optional: true tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz"), emit: undetermined, optional: true tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz"), emit: undetermined_idx, optional: true - tuple val(meta), path("output/Reports/*.{csv,xml,bin}"), emit: reports - tuple val(meta), path("output/Logs/*.{log,txt}"), emit: logs + tuple val(meta), path("output/Reports"), emit: reports + tuple val(meta), path("output/Logs"), emit: logs tuple val(meta), path("output/InterOp/*.bin"), emit: interop, optional: true tuple val("${task.process}"), val('bclconvert'), eval("bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //'"), topic: versions, emit: versions_bclconvert @@ -103,36 +103,3 @@ process BCLCONVERT { echo "fake InterOp file" > output/InterOp/TileMetricsOut.bin """ } - -def generateReadgroup(ch_fastq_list_csv, ch_fastq) { - return ch_fastq_list_csv - .join(ch_fastq, by: [0]) - .map { meta, csv_file, fastq_list -> - def meta_fastq = [] - csv_file - .splitCsv(header: true) - .each { row -> - // Create the readgroup tuple - // RGID,RGSM,RGLB,Lane,Read1File,Read2File - def rg = [:] - // row.RGID is index1.index2.lane - rg.ID = row.RGID - // RGPU is a custom column in the samplesheet containing the flowcell ID - rg.PU = row.RGPU ? row.RGPU : meta.id + "." + row.Lane - rg.SM = row.RGSM - rg.LB = row.RGLB ? row.RGLB : "" - rg.PL = "ILLUMINA" - - // dereference the fastq files in the csv - def fastq1 = fastq_list.find { fq -> file(fq).name == file(row.Read1File).name } - def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null - - // set fastq metadata - def new_meta = meta + [id: fastq1.getSimpleName().toString() - ~/_R[0-9]_001.*$/, readgroup: rg, single_end: !fastq2] - - meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] - } - return meta_fastq - } - .flatMap() -} diff --git a/modules/nf-core/bclconvert/meta.yml b/modules/nf-core/bclconvert/meta.yml index a483715a..27f9b1db 100644 --- a/modules/nf-core/bclconvert/meta.yml +++ b/modules/nf-core/bclconvert/meta.yml @@ -75,10 +75,10 @@ output: - - meta: type: map description: Groovy Map containing sample information - - output/Reports/*.{csv,xml,bin}: + - output/Reports: type: file description: Demultiplexing Reports - pattern: "Reports/*.{csv,xml,bin}" + pattern: "Reports" ontologies: - edam: http://edamontology.org/format_3752 #CSV - edam: http://edamontology.org/format_2332 #XML @@ -87,10 +87,10 @@ output: - - meta: type: map description: Groovy Map containing sample information - - output/Logs/*.{log,txt}: + - output/Logs: type: file description: Demultiplexing Logs - pattern: "Logs/*.{log,txt}" + pattern: "Logs" ontologies: - edam: http://edamontology.org/format_2330 #TEXT interop: diff --git a/modules/nf-core/bclconvert/tests/main.nf.test b/modules/nf-core/bclconvert/tests/main.nf.test index 56ec207a..b1b7acab 100644 --- a/modules/nf-core/bclconvert/tests/main.nf.test +++ b/modules/nf-core/bclconvert/tests/main.nf.test @@ -33,8 +33,8 @@ nextflow_process { process.out.fastq_idx, process.out.undetermined.collect { meta, fastq -> file(fastq).name }, process.out.undetermined_idx, - process.out.reports.collect {meta, files -> files.collect { file(it).name }.sort() }, - process.out.logs.collect {meta, files -> files.collect { file(it).name }.sort() }, + process.out.reports.collect {meta, dir -> file(dir).name }, + process.out.logs.collect {meta, dir -> file(dir).name }, process.out.interop.collect {meta, files -> files.collect { file(it).name }.sort() }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } @@ -72,8 +72,8 @@ nextflow_process { process.out.fastq_idx, process.out.undetermined.collect { meta, fastq -> file(fastq).name }, process.out.undetermined_idx, - process.out.reports.collect {meta, files -> files.collect { file(it).name }.sort() }, - process.out.logs.collect {meta, files -> files.collect { file(it).name }.sort() }, + process.out.reports.collect {meta, dir -> file(dir).name }, + process.out.logs.collect {meta, dir -> file(dir).name }, process.out.interop.collect {meta, files -> files.collect { file(it).name }.sort() }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } diff --git a/modules/nf-core/bclconvert/tests/main.nf.test.snap b/modules/nf-core/bclconvert/tests/main.nf.test.snap index 43233d59..b228a5b2 100644 --- a/modules/nf-core/bclconvert/tests/main.nf.test.snap +++ b/modules/nf-core/bclconvert/tests/main.nf.test.snap @@ -19,29 +19,10 @@ ], [ - [ - "Adapter_Cycle_Metrics.csv", - "Adapter_Metrics.csv", - "Demultiplex_Detailed_Stats.csv", - "Demultiplex_Stats.csv", - "Demultiplex_Tile_Stats.csv", - "IndexMetricsOut.bin", - "Index_Hopping_Counts.csv", - "Quality_Metrics.csv", - "Quality_Tile_Metrics.csv", - "RunInfo.xml", - "SampleSheet.csv", - "Top_Unknown_Barcodes.csv", - "fastq_list.csv" - ] + "Reports" ], [ - [ - "Errors.log", - "FastqComplete.txt", - "Info.log", - "Warnings.log" - ] + "Logs" ], [ [ @@ -77,7 +58,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.4" }, - "timestamp": "2026-02-17T16:59:36.617127" + "timestamp": "2026-03-04T20:03:26.54479" }, "homo_sapiens illumina [bcl] - stub": { "content": [ @@ -279,29 +260,10 @@ ], [ - [ - "Adapter_Cycle_Metrics.csv", - "Adapter_Metrics.csv", - "Demultiplex_Detailed_Stats.csv", - "Demultiplex_Stats.csv", - "Demultiplex_Tile_Stats.csv", - "IndexMetricsOut.bin", - "Index_Hopping_Counts.csv", - "Quality_Metrics.csv", - "Quality_Tile_Metrics.csv", - "RunInfo.xml", - "SampleSheet.csv", - "Top_Unknown_Barcodes.csv", - "fastq_list.csv" - ] + "Reports" ], [ - [ - "Errors.log", - "FastqComplete.txt", - "Info.log", - "Warnings.log" - ] + "Logs" ], [ [ @@ -328,6 +290,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.4" }, - "timestamp": "2026-02-17T16:59:10.205948" + "timestamp": "2026-03-04T20:02:51.80369" } } \ No newline at end of file diff --git a/modules/nf-core/bowtie2/align/main.nf b/modules/nf-core/bowtie2/align/main.nf index 86aa8bef..36383249 100644 --- a/modules/nf-core/bowtie2/align/main.nf +++ b/modules/nf-core/bowtie2/align/main.nf @@ -31,6 +31,7 @@ process BOWTIE2_ALIGN { def args = task.ext.args ?: "" def args2 = task.ext.args2 ?: "" def prefix = task.ext.prefix ?: "${meta.id}" + def rg = args.contains("--rg-id") ? "" : "--rg-id ${prefix} --rg SM:${prefix}" def unaligned = "" def reads_args = "" @@ -59,6 +60,7 @@ process BOWTIE2_ALIGN { $reads_args \\ --threads $task.cpus \\ $unaligned \\ + $rg \\ $args \\ 2>| >(tee ${prefix}.bowtie2.log >&2) \\ | samtools $samtools_command $args2 --threads $task.cpus ${reference} -o ${prefix}.${extension} - diff --git a/modules/nf-core/bowtie2/align/tests/main.nf.test.snap b/modules/nf-core/bowtie2/align/tests/main.nf.test.snap index c8c6d4b5..b1df41e7 100644 --- a/modules/nf-core/bowtie2/align/tests/main.nf.test.snap +++ b/modules/nf-core/bowtie2/align/tests/main.nf.test.snap @@ -47,11 +47,11 @@ "sarscov2 - fastq, index, fasta, false, false - sam2": { "content": [ [ - "ERR5069949.2151832\t16\tMT192765.1\t17453\t42\t150M\t*\t0\t0\tACGCACATTGCTAACTAAGGGCACACTAGAACCAGAATATTTCAATTCAGTGTGTAGACTTATGAAAACTATAGGTCCAGACATGTTCCTCGGAACTTGTCGGCGTTGTCCTGCTGAAATTGTTGACACTGTGAGTGCTTTGGTTTATGA\tAAAA 0 ? extension_matcher[0][2].toLowerCase() : "bam" - def reference = fasta && extension=="cram" ? "--reference ${fasta}" : "" - if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" - + def reference = fasta && extension == "cram" ? "--reference ${fasta}" : "" + if (!fasta && extension == "cram") { + error("Fasta reference is required for CRAM output") + } """ INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` bwa-mem2 \\ mem \\ - $args \\ - -t $task.cpus \\ + ${args} \\ + -t ${task.cpus} \\ \$INDEX \\ - $reads \\ - | samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.${extension} - + ${reads} \\ + | samtools ${samtools_command} ${args2} -@ ${task.cpus} ${reference} -o ${prefix}.${extension} - """ stub: - def args2 = task.ext.args2 ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def extension_pattern = /(--output-fmt|-O)+\s+(\S+)/ - def extension_matcher = (args2 =~ extension_pattern) + def extension_matcher = (args2 =~ extension_pattern) def extension = extension_matcher.getCount() > 0 ? extension_matcher[0][2].toLowerCase() : "bam" - if (!fasta && extension=="cram") error "Fasta reference is required for CRAM output" + if (!fasta && extension == "cram") { + error("Fasta reference is required for CRAM output") + } def create_index = "" if (extension == "cram") { create_index = "touch ${prefix}.crai" - } else if (extension == "bam") { + } + else if (extension == "bam") { create_index = "touch ${prefix}.csi" } - """ touch ${prefix}.${extension} ${create_index} diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml index bcfd006d..a60d6788 100644 --- a/modules/nf-core/bwamem2/mem/meta.yml +++ b/modules/nf-core/bwamem2/mem/meta.yml @@ -129,6 +129,16 @@ output: - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+": type: eval description: The expression to obtain the version of the tool + versions_samtools: + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool topics: versions: - - ${task.process}: @@ -140,6 +150,15 @@ topics: - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+": type: eval description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - samtools: + type: string + description: The name of the tool + - samtools version | sed '1!d;s/.* //': + type: eval + description: The expression to obtain the version of the tool authors: - "@maxulysse" - "@matthdsm" diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test b/modules/nf-core/bwamem2/mem/tests/main.nf.test index 20e37254..be33a3a7 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test @@ -50,7 +50,6 @@ nextflow_process { ).match() } ) } - } test("sarscov2 - fastq, index, fasta, true") { @@ -79,7 +78,6 @@ nextflow_process { ).match() } ) } - } test("sarscov2 - [fastq1, fastq2], index, fasta, false") { @@ -111,7 +109,6 @@ nextflow_process { ).match() } ) } - } test("sarscov2 - [fastq1, fastq2], index, fasta, true") { @@ -143,7 +140,6 @@ nextflow_process { ).match() } ) } - } test("sarscov2 - [fastq1, fastq2], index, fasta, true - stub") { @@ -170,10 +166,8 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } - } - } diff --git a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap index 74763935..06d854b0 100644 --- a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap +++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap @@ -10,52 +10,25 @@ "bwamem2", "2.2.1" ] + ], + "versions_samtools": [ + [ + "BWAMEM2_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-02-19T11:51:27.481278728", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:25:00.500092" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - [fastq1, fastq2], index, fasta, true - stub": { "content": [ { - "0": [ - - ], - "1": [ - [ - { - "id": "test", - "single_end": false - }, - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - - ], - "3": [ - - ], - "4": [ - [ - { - "id": "test", - "single_end": false - }, - "test.csi:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "5": [ - [ - "BWAMEM2_MEM", - "bwamem2", - "2.2.1" - ] - ], "bam": [ [ { @@ -89,14 +62,21 @@ "bwamem2", "2.2.1" ] + ], + "versions_samtools": [ + [ + "BWAMEM2_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-02-19T11:54:06.902806102", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:25:22.004027" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - [fastq1, fastq2], index, fasta, true": { "content": [ @@ -109,14 +89,21 @@ "bwamem2", "2.2.1" ] + ], + "versions_samtools": [ + [ + "BWAMEM2_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-02-19T11:51:40.483217643", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:25:14.131056" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - fastq, index, fasta, false": { "content": [ @@ -129,14 +116,21 @@ "bwamem2", "2.2.1" ] + ], + "versions_samtools": [ + [ + "BWAMEM2_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-02-19T11:51:02.459481643", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:24:34.624533" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - fastq, index, fasta, true": { "content": [ @@ -149,13 +143,20 @@ "bwamem2", "2.2.1" ] + ], + "versions_samtools": [ + [ + "BWAMEM2_MEM", + "samtools", + "1.22.1" + ] ] } ], + "timestamp": "2026-02-19T11:51:15.170720681", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:24:47.191245" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 25c2a503..5376aea1 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -1,26 +1,21 @@ process MULTIQC { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data' : - 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data' + : 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b'}" input: - tuple val(meta), path(multiqc_files, stageAs: "?/*") - path(multiqc_config) - path(extra_multiqc_config) - path(multiqc_logo) - path(replace_names) - path(sample_names) + tuple val(meta), path(multiqc_files, stageAs: "?/*"), path(multiqc_config, stageAs: "?/*"), path(multiqc_logo), path(replace_names), path(sample_names) output: - path "*.html" , emit: report - path "*_data" , emit: data - path "*_plots" , optional:true, emit: plots - tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions + tuple val(meta), path("*.html"), emit: report + tuple val(meta), path("*_data"), emit: data + tuple val(meta), path("*_plots"), emit: plots, optional: true // MultiQC should not push its versions to the `versions` topic. Its input depends on the versions topic to be resolved thus outputting to the topic will let the pipeline hang forever + tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions when: task.ext.when == null || task.ext.when @@ -28,8 +23,7 @@ process MULTIQC { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' - def config = multiqc_config ? "--config ${multiqc_config}" : '' - def extra_config = extra_multiqc_config ? "--config ${extra_multiqc_config}" : '' + def config = multiqc_config ? multiqc_config instanceof List ? "--config ${multiqc_config.join(' --config ')}" : "--config ${multiqc_config}" : "" def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' def replace = replace_names ? "--replace-names ${replace_names}" : '' def samples = sample_names ? "--sample-names ${sample_names}" : '' @@ -39,7 +33,6 @@ process MULTIQC { ${args} \\ ${config} \\ ${prefix} \\ - ${extra_config} \\ ${logo} \\ ${replace} \\ ${samples} \\ @@ -51,6 +44,7 @@ process MULTIQC { mkdir multiqc_data touch multiqc_data/.stub mkdir multiqc_plots + touch multiqc_plots/.stub touch multiqc_report.html """ } diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index 9fd34f37..ef434a9a 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -1,6 +1,6 @@ name: multiqc -description: Aggregate results from bioinformatics analyses across many samples into - a single report +description: Aggregate results from bioinformatics analyses across many samples + into a single report keywords: - QC - bioinformatics tools @@ -12,67 +12,81 @@ tools: It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. homepage: https://multiqc.info/ documentation: https://multiqc.info/docs/ - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" identifier: biotools:multiqc input: - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - ontologies: [] - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections - in multiqc_config. - pattern: "*.{yml,yaml}" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML - - multiqc_logo: - type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" - ontologies: [] - - replace_names: - type: file - description: | - Optional two-column sample renaming file. First column a set of - patterns, second column a set of corresponding replacements. Passed via - MultiQC's `--replace-names` option. - pattern: "*.{tsv}" - ontologies: - - edam: http://edamontology.org/format_3475 # TSV - - sample_names: - type: file - description: | - Optional TSV file with headers, passed to the MultiQC --sample_names - argument. - pattern: "*.{tsv}" - ontologies: - - edam: http://edamontology.org/format_3475 # TSV -output: - report: - - "*.html": + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - multiqc_files: type: file - description: MultiQC report file - pattern: ".html" + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC ontologies: [] - data: - - "*_data": - type: directory - description: MultiQC data dir - pattern: "multiqc_data" - plots: - - "*_plots": + - multiqc_config: type: file - description: Plots created by MultiQC - pattern: "*_plots" + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" ontologies: [] + - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 + - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 +output: + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*.html": + type: file + description: MultiQC report file + pattern: ".html" + ontologies: [] + data: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + plots: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_plots" + ontologies: [] versions: - - ${task.process}: type: string diff --git a/modules/nf-core/multiqc/multiqc.diff b/modules/nf-core/multiqc/multiqc.diff deleted file mode 100644 index f0991afe..00000000 --- a/modules/nf-core/multiqc/multiqc.diff +++ /dev/null @@ -1,27 +0,0 @@ -Changes in component 'nf-core/multiqc' -'modules/nf-core/multiqc/environment.yml' is unchanged -'modules/nf-core/multiqc/meta.yml' is unchanged -Changes in 'multiqc/main.nf': ---- modules/nf-core/multiqc/main.nf -+++ modules/nf-core/multiqc/main.nf -@@ -1,4 +1,5 @@ - process MULTIQC { -+ tag "$meta.id" - label 'process_single' - - conda "${moduleDir}/environment.yml" -@@ -7,7 +8,7 @@ - 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b' }" - - input: -- path multiqc_files, stageAs: "?/*" -+ tuple val(meta), path(multiqc_files, stageAs: "?/*") - path(multiqc_config) - path(extra_multiqc_config) - path(multiqc_logo) - -'modules/nf-core/multiqc/tests/main.nf.test.snap' is unchanged -'modules/nf-core/multiqc/tests/nextflow.config' is unchanged -'modules/nf-core/multiqc/tests/main.nf.test' is unchanged -'modules/nf-core/multiqc/tests/custom_prefix.config' is unchanged -************************************************************ diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test index d1ae8b06..0e422eaa 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test +++ b/modules/nf-core/multiqc/tests/main.nf.test @@ -15,25 +15,28 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions")}).match() } + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } ) } - } test("sarscov2 single-end [fastqc] - custom prefix") { @@ -42,24 +45,28 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/custom_prefix.html" }, - { assert process.out.data[0] ==~ ".*/custom_prefix_data" } + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } ) } - } test("sarscov2 single-end [fastqc] [config]") { @@ -67,22 +74,60 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = Channel.of(file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true)) - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true), + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert process.out.report[0] ==~ ".*/multiqc_report.html" }, - { assert process.out.data[0] ==~ ".*/multiqc_data" }, - { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions")}).match() } + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + file(process.out.plots[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } + ) + } + } + + test("sarscov2 single-end [fastqc] [multiple configs]") { + + when { + process { + """ + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [ + file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true), + file("https://github.com/nf-core/tools/raw/dev/nf_core/pipeline-template/assets/multiqc_config.yml", checkIfExists: true) + ], + [], + [], + [] + ]) + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + file(process.out.plots[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } ) } } @@ -94,25 +139,23 @@ nextflow_process { when { process { """ - input[0] = Channel.of(file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true)) - input[1] = [] - input[2] = [] - input[3] = [] - input[4] = [] - input[5] = [] + input[0] = channel.of([ + [ id: 'FASTQC' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastqc/test_fastqc.zip', checkIfExists: true), + [], + [], + [], + [] + ]) """ } } then { + assert process.success assertAll( - { assert process.success }, - { assert snapshot(process.out.report.collect { file(it).getName() } + - process.out.data.collect { file(it).getName() } + - process.out.plots.collect { file(it).getName() } + - process.out.findAll { key, val -> key.startsWith("versions")} ).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } - } } diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index d72d35b7..c022701f 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -1,6 +1,9 @@ { - "sarscov2 single-end [fastqc]": { + "sarscov2 single-end [fastqc] [multiple configs]": { "content": [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", { "versions": [ [ @@ -13,35 +16,81 @@ ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-26T20:21:35.851707" + }, + "sarscov2 single-end [fastqc]": { + "content": [ + "multiqc_report.html", + "multiqc_data", + { + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.33" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-12-09T10:10:43.020315838" + "timestamp": "2026-02-26T15:10:36.019680076" }, "sarscov2 single-end [fastqc] - stub": { "content": [ - [ - "multiqc_report.html", - "multiqc_data", - "multiqc_plots", - { - "versions": [ + { + "data": [ + [ + { + "id": "FASTQC" + }, [ - "MULTIQC", - "multiqc", - "1.33" + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] - } - ] + ], + "plots": [ + [ + { + "id": "FASTQC" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "report": [ + [ + { + "id": "FASTQC" + }, + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.33" + ] + ] + } ], "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-12-09T10:11:14.131950776" + "timestamp": "2026-02-26T15:14:39.789193051" }, "sarscov2 single-end [fastqc] [config]": { "content": [ + "multiqc_report.html", + "multiqc_data", + "multiqc_plots", { "versions": [ [ @@ -53,9 +102,29 @@ } ], "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-26T15:21:29.116129274" + }, + "sarscov2 single-end [fastqc] - custom prefix": { + "content": [ + "custom_prefix.html", + "custom_prefix_data", + { + "versions": [ + [ + "MULTIQC", + "multiqc", + "1.33" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-12-09T10:11:07.15692209" + "timestamp": "2026-02-26T15:10:43.419877592" } } \ No newline at end of file diff --git a/modules/nf-core/multiqcsav/environment.yml b/modules/nf-core/multiqcsav/environment.yml new file mode 100644 index 00000000..092076ff --- /dev/null +++ b/modules/nf-core/multiqcsav/environment.yml @@ -0,0 +1,13 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + # renovate: datasource=conda depName=bioconda/multiqc + - bioconda::multiqc=1.33 + # renovate: datasource=conda depName=bioconda/multiqc_sav + - bioconda::multiqc_sav=0.2.0 + - pip=25.3 + - pip: + - interop==1.9.0 diff --git a/modules/nf-core/multiqcsav/main.nf b/modules/nf-core/multiqcsav/main.nf new file mode 100644 index 00000000..833ad6df --- /dev/null +++ b/modules/nf-core/multiqcsav/main.nf @@ -0,0 +1,53 @@ +process MULTIQCSAV { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/36/3634362a0bf5a0530a6459bdba392622262d6de6cc0062e9a293bacc3098b323/data' + : 'community.wave.seqera.io/library/multiqc_multiqc_sav_pip_interop:b142653b3920c82b'}" + + input: + tuple val(meta), path(xml), path(interop_bin, stageAs: "InterOp/*"), path(extra_multiqc_files, stageAs: "?/*"), path(multiqc_config, stageAs: "?/*"), path(multiqc_logo), path(replace_names), path(sample_names) + + output: + tuple val(meta), path("*.html"), emit: report + tuple val(meta), path("*_data"), emit: data + tuple val(meta), path("*_plots"), emit: plots, optional: true + // MultiQC should not push its versions to the `versions` topic. Its input depends on the versions topic to be resolved thus outputting to the topic will let the pipeline hang forever + tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions + tuple val("${task.process}"), val('multiqcsav'), eval('python -c "import multiqc_sav; print(multiqc_sav.__version__)"'), emit: versions_multiqcsav + tuple val("${task.process}"), val('interop'), eval('python -c "import interop; print(interop.__version__)"'), emit: versions_interop + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ? "--filename ${task.ext.prefix}.html" : '' + def config = multiqc_config ? multiqc_config instanceof List ? "--config ${multiqc_config.join(' --config ')}" : "--config ${multiqc_config}" : "" + def logo = multiqc_logo ? "--cl-config 'custom_logo: \"${multiqc_logo}\"'" : '' + def replace = replace_names ? "--replace-names ${replace_names}" : '' + def samples = sample_names ? "--sample-names ${sample_names}" : '' + """ + export TMPDIR="\$PWD/tmp" + multiqc \\ + --force \\ + ${args} \\ + ${config} \\ + ${prefix} \\ + ${logo} \\ + ${replace} \\ + ${samples} \\ + . + """ + + stub: + """ + mkdir multiqc_data + touch multiqc_data/.stub + mkdir multiqc_plots + touch multiqc_plots/.stub + touch multiqc_report.html + """ +} diff --git a/modules/nf-core/multiqcsav/meta.yml b/modules/nf-core/multiqcsav/meta.yml new file mode 100644 index 00000000..86545841 --- /dev/null +++ b/modules/nf-core/multiqcsav/meta.yml @@ -0,0 +1,139 @@ +name: multiqcsav +description: Aggregate results from bioinformatics analyses across many samples + into a single report, with support for multiqc_sav plugin +keywords: + - QC + - bioinformatics tools + - Beautiful stand-alone HTML report + - Illumina + - Sequencing Analysis Viewer + - SAV +tools: + - multiqc: + description: | + MultiQC searches a given directory for analysis logs and compiles a HTML report. + It's a general use tool, perfect for summarising the output from numerous bioinformatics tools. + homepage: https://multiqc.info/ + documentation: https://multiqc.info/docs/ + licence: + - "GPL-3.0-or-later" + identifier: biotools:multiqc +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - xml: + type: file + description: xml files from an Illumina sequencing run + pattern: "*.xml" + ontologies: + - edam: http://edamontology.org/format_2332 + - interop_bin: + type: file + description: Illumina InterOp binary files + pattern: "InterOp/*.bin" + ontologies: + - edam: http://edamontology.org/format_2333 + - extra_multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + ontologies: [] + - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + ontologies: [] + - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 + - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 +output: + report: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*.html": + type: file + description: MultiQC report file + pattern: ".html" + ontologies: [] + data: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + plots: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'sample1', single_end:false ] + - "*_plots": + type: file + description: Plots created by MultiQC + pattern: "*_data" + ontologies: [] + versions: + - - ${task.process}: + type: string + description: The process the versions were collected from + - multiqc: + type: string + description: The tool name + - multiqc --version | sed "s/.* //g": + type: eval + description: The expression to obtain the version of the tool + versions_interop: + - - ${task.process}: + type: string + description: The process the versions were collected from + - interop: + type: string + description: The tool name + - python -c "import interop; print(interop.__version__)": + type: eval + description: The expression to obtain the version of the tool + versions_multiqcsav: + - - ${task.process}: + type: string + description: The process the versions were collected from + - multiqcsav: + type: string + description: The name of the tool + - python -c "import multiqc_sav; print(multiqc_sav.__version__)": + type: eval + description: The expression to obtain the version of the tool +authors: + - "@matthdsm" + - "@delfiterradas" +maintainers: + - "@matthdsm" diff --git a/modules/nf-core/multiqcsav/tests/main.nf.test b/modules/nf-core/multiqcsav/tests/main.nf.test new file mode 100644 index 00000000..3f48121e --- /dev/null +++ b/modules/nf-core/multiqcsav/tests/main.nf.test @@ -0,0 +1,136 @@ +nextflow_process { + + name "Test Process MULTIQCSAV" + script "../main.nf" + process "MULTIQCSAV" + + tag "modules" + tag "modules_nfcore" + tag "untar" + tag "multiqcsav" + + test("NovaSeq6000") { + setup { + run("UNTAR") { + script "../../untar/main.nf" + process { + """ + input[0] = [ + [ id: 'NovaSeq6000' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bcl/200624_A00834_0183_BHMTFYDRXX.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + ch_sav_in = UNTAR.out.untar.map{ meta, untar -> + + def xml = [] + untar.eachFileRecurse { file -> + if (file.fileName.toString() == 'RunInfo.xml') { + xml << file + } + } + + def interop = [] + untar.eachFileRecurse { file -> + if (file.parent.name == 'InterOp' && file.fileName.toString().endsWith(".bin")) { + interop << file + } + } + + return [ + meta, + xml, + interop, + [], + [], + [], + [], + [] + ] + } + + input[0] = ch_sav_in + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot( + file(process.out.report[0][1]).name, + file(process.out.data[0][1]).name, + process.out.findAll { key, val -> key.startsWith("versions") + }).match() } + ) + } + } + + test("NovaSeq6000 - stub") { + + options "-stub" + + setup { + run("UNTAR") { + script "../../untar/main.nf" + process { + """ + input[0] = [ + [ id: 'NovaSeq6000' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bcl/200624_A00834_0183_BHMTFYDRXX.tar.gz', checkIfExists: true) + ] + """ + } + } + } + + when { + process { + """ + ch_sav_in = UNTAR.out.untar.map{ meta, untar -> + + def xml = [] + untar.eachFileRecurse { file -> + if (file.fileName.toString() == 'RunInfo.xml') { + xml << file + } + } + + def interop = [] + untar.eachFileRecurse { file -> + if (file.parent.name == 'InterOp' && file.fileName.toString().endsWith(".bin")) { + interop << file + } + } + + return [ + meta, + xml, + interop, + [], + [], + [], + [], + [] + ] + } + + input[0] = ch_sav_in + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } +} diff --git a/modules/nf-core/multiqcsav/tests/main.nf.test.snap b/modules/nf-core/multiqcsav/tests/main.nf.test.snap new file mode 100644 index 00000000..3f3783a1 --- /dev/null +++ b/modules/nf-core/multiqcsav/tests/main.nf.test.snap @@ -0,0 +1,96 @@ +{ + "NovaSeq6000": { + "content": [ + "multiqc_report.html", + "multiqc_data", + { + "versions": [ + [ + "MULTIQCSAV", + "multiqc", + "1.33" + ] + ], + "versions_interop": [ + [ + "MULTIQCSAV", + "interop", + "1.9.0" + ] + ], + "versions_multiqcsav": [ + [ + "MULTIQCSAV", + "multiqcsav", + "0.2.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-26T15:17:26.065765698" + }, + "NovaSeq6000 - stub": { + "content": [ + { + "data": [ + [ + { + "id": "NovaSeq6000" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "plots": [ + [ + { + "id": "NovaSeq6000" + }, + [ + ".stub:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "report": [ + [ + { + "id": "NovaSeq6000" + }, + "multiqc_report.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + [ + "MULTIQCSAV", + "multiqc", + "1.33" + ] + ], + "versions_interop": [ + [ + "MULTIQCSAV", + "interop", + "1.9.0" + ] + ], + "versions_multiqcsav": [ + [ + "MULTIQCSAV", + "multiqcsav", + "0.2.0" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + }, + "timestamp": "2026-02-26T15:18:42.648653899" + } +} \ No newline at end of file diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf index 22d95d57..2b9b7588 100644 --- a/modules/nf-core/picard/collecthsmetrics/main.nf +++ b/modules/nf-core/picard/collecthsmetrics/main.nf @@ -1,18 +1,18 @@ process PICARD_COLLECTHSMETRICS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' : - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" input: tuple val(meta), path(bam), path(bai), path(bait_intervals, stageAs: "bait/*"), path(target_intervals, stageAs: "target/*") ,path(fasta) ,path(fai) ,path(dict) output: - tuple val(meta), path("*_metrics") , emit: metrics - tuple val("${task.process}"), val('picard'), eval("picard CollectHsMetrics --version 2>&1 | sed -n 's/^Version:*//p'"), topic: versions, emit: versions_picard + tuple val(meta), path("*_metrics"), emit: metrics + tuple val("${task.process}"), val('picard'), eval("picard CollectHsMetrics --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard when: task.ext.when == null || task.ext.when @@ -24,40 +24,38 @@ process PICARD_COLLECTHSMETRICS { def avail_mem = 3072 if (!task.memory) { - log.info '[Picard CollectHsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard CollectHsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } def bait_interval_list = bait_intervals def bait_intervallist_cmd = "" - if (bait_intervals =~ /.(bed|bed.gz)$/){ + if (bait_intervals =~ /.(bed|bed.gz)$/) { bait_interval_list = bait_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") bait_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${bait_intervals} --OUTPUT ${bait_interval_list} --SEQUENCE_DICTIONARY ${dict} --TMP_DIR ." } def target_interval_list = target_intervals def target_intervallist_cmd = "" - if (target_intervals =~ /.(bed|bed.gz)$/){ + if (target_intervals =~ /.(bed|bed.gz)$/) { target_interval_list = target_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") target_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${target_intervals} --OUTPUT ${target_interval_list} --SEQUENCE_DICTIONARY ${dict} --TMP_DIR ." } - - """ export TMP=\$PWD - - $bait_intervallist_cmd - $target_intervallist_cmd + ${bait_intervallist_cmd} + ${target_intervallist_cmd} picard \\ -Xmx${avail_mem}M \\ CollectHsMetrics \\ - $args \\ - $reference \\ - --BAIT_INTERVALS $bait_interval_list \\ - --TARGET_INTERVALS $target_interval_list \\ - --INPUT $bam \\ + ${args} \\ + ${reference} \\ + --BAIT_INTERVALS ${bait_interval_list} \\ + --TARGET_INTERVALS ${target_interval_list} \\ + --INPUT ${bam} \\ --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics \\ --TMP_DIR . """ diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml index a21aa6ec..89bc502c 100644 --- a/modules/nf-core/picard/collecthsmetrics/meta.yml +++ b/modules/nf-core/picard/collecthsmetrics/meta.yml @@ -106,7 +106,7 @@ output: - picard: type: string description: The tool name - - "picard CollectHsMetrics --version 2>&1 | sed -n 's/^Version:*//p'": + - "picard CollectHsMetrics --version 2>&1 | sed -n 's/.*Version://p'": type: string description: The command used to generate the version of the tool @@ -118,7 +118,7 @@ topics: - picard: type: string description: The tool name - - "picard CollectHsMetrics --version 2>&1 | sed -n 's/^Version:*//p'": + - "picard CollectHsMetrics --version 2>&1 | sed -n 's/.*Version://p'": type: string description: The command used to generate the version of the tool authors: diff --git a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff index f4bf1eda..f9b0281a 100644 --- a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff +++ b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff @@ -5,18 +5,18 @@ Changes in 'picard/collecthsmetrics/main.nf': --- modules/nf-core/picard/collecthsmetrics/main.nf +++ modules/nf-core/picard/collecthsmetrics/main.nf @@ -8,11 +8,7 @@ - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" input: - tuple val(meta), path(bam), path(bai), path(bait_intervals, stageAs: "baits/*"), path(target_intervals, stageAs: 'targets/*') - tuple val(meta2), path(ref) - tuple val(meta3), path(ref_fai) - tuple val(meta4), path(ref_dict) -- tuple val(meta5), path(ref_gzi) // ref_gzi only required if reference is gzipped +- tuple val(meta5), path(ref_gzi) + tuple val(meta), path(bam), path(bai), path(bait_intervals, stageAs: "bait/*"), path(target_intervals, stageAs: "target/*") ,path(fasta) ,path(fai) ,path(dict) output: - tuple val(meta), path("*_metrics") , emit: metrics + tuple val(meta), path("*_metrics"), emit: metrics @@ -24,7 +20,7 @@ script: def args = task.ext.args ?: '' @@ -26,9 +26,9 @@ Changes in 'picard/collecthsmetrics/main.nf': def avail_mem = 3072 if (!task.memory) { -@@ -37,18 +33,19 @@ +@@ -38,16 +34,17 @@ def bait_intervallist_cmd = "" - if (bait_intervals =~ /.(bed|bed.gz)$/){ + if (bait_intervals =~ /.(bed|bed.gz)$/) { bait_interval_list = bait_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") - bait_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${bait_intervals} --OUTPUT ${bait_interval_list} --SEQUENCE_DICTIONARY ${ref_dict} --TMP_DIR ." + bait_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${bait_intervals} --OUTPUT ${bait_interval_list} --SEQUENCE_DICTIONARY ${dict} --TMP_DIR ." @@ -36,24 +36,21 @@ Changes in 'picard/collecthsmetrics/main.nf': def target_interval_list = target_intervals def target_intervallist_cmd = "" - if (target_intervals =~ /.(bed|bed.gz)$/){ + if (target_intervals =~ /.(bed|bed.gz)$/) { target_interval_list = target_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list") - target_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${target_intervals} --OUTPUT ${target_interval_list} --SEQUENCE_DICTIONARY ${ref_dict} --TMP_DIR ." + target_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${target_intervals} --OUTPUT ${target_interval_list} --SEQUENCE_DICTIONARY ${dict} --TMP_DIR ." } - - """ + export TMP=\$PWD + ${bait_intervallist_cmd} + ${target_intervallist_cmd} - $bait_intervallist_cmd - $target_intervallist_cmd -@@ -61,8 +58,8 @@ - --BAIT_INTERVALS $bait_interval_list \\ - --TARGET_INTERVALS $target_interval_list \\ - --INPUT $bam \\ +@@ -59,7 +56,8 @@ + --BAIT_INTERVALS ${bait_interval_list} \\ + --TARGET_INTERVALS ${target_interval_list} \\ + --INPUT ${bam} \\ - --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics -- + --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics \\ + --TMP_DIR . """ diff --git a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test index 07a9ccf4..d7366111 100644 --- a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test +++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test @@ -40,11 +40,9 @@ nextflow_process { size, lines, process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } - } test("sarscov2 - bam - gzippedfa") { @@ -78,17 +76,13 @@ nextflow_process { size, lines, process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } - } test("sarscov2 - bam - stub") { - options "-stub" - when { process { """ @@ -110,10 +104,9 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } - } test("sarscov2 - bam - nofasta") { @@ -147,11 +140,9 @@ nextflow_process { size, lines, process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } - } test("sarscov2 - bam - bed") { @@ -186,11 +177,9 @@ nextflow_process { size, lines, process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } - } test("sarscov2 - bam - samebed") { @@ -225,10 +214,8 @@ nextflow_process { size, lines, process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } - } } diff --git a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap index 74d9441f..43385314 100644 --- a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap +++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap @@ -115,31 +115,15 @@ ] } ], + "timestamp": "2026-01-05T17:03:29.566021877", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-05T17:03:29.566021877" + } }, "sarscov2 - bam - stub": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.CollectHsMetrics.coverage_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - "PICARD_COLLECTHSMETRICS", - "picard", - "3.4.0" - ] - ], "metrics": [ [ { @@ -158,11 +142,11 @@ ] } ], + "timestamp": "2026-02-19T17:36:03.822502867", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-05T17:03:13.333276975" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "sarscov2 - bam - gzippedfa": { "content": [ @@ -280,11 +264,11 @@ ] } ], + "timestamp": "2026-01-05T17:03:04.382110367", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-05T17:03:04.382110367" + } }, "sarscov2 - bam - samebed": { "content": [ @@ -402,11 +386,11 @@ ] } ], + "timestamp": "2026-01-05T17:13:22.872920293", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-05T17:13:22.872920293" + } }, "sarscov2 - bam": { "content": [ @@ -524,11 +508,11 @@ ] } ], + "timestamp": "2026-01-05T17:02:47.615784738", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-05T17:02:47.615784738" + } }, "sarscov2 - bam - bed": { "content": [ @@ -646,10 +630,10 @@ ] } ], + "timestamp": "2026-01-05T17:13:02.812282052", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-05T17:13:02.812282052" + } } } \ No newline at end of file diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf index 11b00464..59842bdd 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/main.nf +++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -1,19 +1,19 @@ process PICARD_COLLECTMULTIPLEMETRICS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' : - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" input: tuple val(meta) , path(bam), path(bai), path(intervals), path(fasta) ,path(fai), path(dict) output: tuple val(meta), path("*_metrics"), emit: metrics - tuple val(meta), path("*.pdf") , emit: pdf, optional: true - tuple val("${task.process}"), val('picard'), eval("picard CollectMultipleMetrics --version 2>&1 | sed -n 's/^Version:*//p'"), topic: versions, emit: versions_picard + tuple val(meta), path("*.pdf"), emit: pdf, optional: true + tuple val("${task.process}"), val('picard'), eval("picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard when: task.ext.when == null || task.ext.when @@ -25,21 +25,22 @@ process PICARD_COLLECTMULTIPLEMETRICS { def reference_cmd = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { - log.info '[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } """ export TMP=\$PWD picard \\ -Xmx${avail_mem}M \\ CollectMultipleMetrics \\ - $args \\ - --INPUT $bam \\ + ${args} \\ + --INPUT ${bam} \\ --OUTPUT ${prefix}.CollectMultipleMetrics \\ --TMP_DIR . \\ - $reference_cmd \\ - $intervals_cmd + ${reference_cmd} \\ + ${intervals_cmd} """ stub: diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml index 1ea47244..213d600b 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml +++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml @@ -81,7 +81,7 @@ output: - picard: type: string description: The tool name - - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/^Version:*//p'": + - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'": type: string description: The command used to generate the version of the tool @@ -93,7 +93,7 @@ topics: - picard: type: string description: The tool name - - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/^Version:*//p'": + - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/.*Version://p'": type: string description: The command used to generate the version of the tool diff --git a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff index 1d7cbf60..780c0862 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff +++ b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff @@ -5,10 +5,10 @@ Changes in 'picard/collectmultiplemetrics/main.nf': --- modules/nf-core/picard/collectmultiplemetrics/main.nf +++ modules/nf-core/picard/collectmultiplemetrics/main.nf @@ -8,9 +8,7 @@ - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" input: -- tuple val(meta) , path(bam), path(bai) +- tuple val(meta), path(bam), path(bai) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) + tuple val(meta) , path(bam), path(bai), path(intervals), path(fasta) ,path(fai), path(dict) @@ -24,33 +24,25 @@ Changes in 'picard/collectmultiplemetrics/main.nf': + def reference_cmd = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : "" def avail_mem = 3072 if (!task.memory) { - log.info '[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' -@@ -31,14 +30,16 @@ - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard CollectMultipleMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') +@@ -32,13 +31,16 @@ + avail_mem = (task.memory.mega * 0.8).intValue() } """ + export TMP=\$PWD picard \\ -Xmx${avail_mem}M \\ CollectMultipleMetrics \\ - $args \\ - --INPUT $bam \\ + ${args} \\ + --INPUT ${bam} \\ --OUTPUT ${prefix}.CollectMultipleMetrics \\ -- $reference -- +- ${reference} + --TMP_DIR . \\ -+ $reference_cmd \\ -+ $intervals_cmd ++ ${reference_cmd} \\ ++ ${intervals_cmd} """ stub: -@@ -54,6 +55,5 @@ - touch ${prefix}.CollectMultipleMetrics.quality_by_cycle.pdf - touch ${prefix}.CollectMultipleMetrics.insert_size_histogram.pdf - touch ${prefix}.CollectMultipleMetrics.quality_distribution_metrics -- - """ - } 'modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap' is unchanged 'modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test' is unchanged diff --git a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test index 08456941..0037acab 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test +++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test @@ -16,16 +16,15 @@ nextflow_process { process { """ input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) - ] - input[1] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [[id:'genome'],[]] - + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [[id:'genome'],[]] """ } } @@ -37,8 +36,7 @@ nextflow_process { process.out.metrics[0][1].collect { file(it).name }.toSorted(), process.out.pdf[0][1].collect { file(it).name }.toSorted(), process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } } @@ -49,13 +47,12 @@ nextflow_process { process { """ input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) - ] - input[1] = [[id:'genome'],[]] + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [[id:'genome'],[]] input[2] = [[id:'genome'],[]] - """ } } @@ -67,8 +64,7 @@ nextflow_process { process.out.metrics[0][1].collect { file(it).name }.toSorted(), process.out.pdf[0][1].collect { file(it).name }.toSorted(), process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } } @@ -79,19 +75,18 @@ nextflow_process { process { """ input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) - ] - input[1] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) - ] - + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] """ } } @@ -103,10 +98,89 @@ nextflow_process { process.out.metrics[0][1].collect { file(it).name }.toSorted(), process.out.pdf[0][1].collect { file(it).name }.toSorted(), process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} + ) + } + } + + test("test-picard-collectmultiplemetrics - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [[id:'genome'],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-picard-collectmultiplemetrics-nofasta - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [[id:'genome'],[]] + input[2] = [[id:'genome'],[]] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } + test("test-picard-collectmultiplemetrics-cram - stub") { + options "-stub" + when { + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } } diff --git a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap index 1acf3776..393ed100 100644 --- a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap +++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap @@ -25,11 +25,107 @@ ] } ], + "timestamp": "2026-02-02T10:22:21.230301646", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-02-02T10:22:21.230301646" + } + }, + "test-picard-collectmultiplemetrics - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.alignment_summary_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.read_length_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:32:38.701455244", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test-picard-collectmultiplemetrics-nofasta - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.alignment_summary_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.read_length_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:32:48.923918624", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "test-picard-collectmultiplemetrics-cram": { "content": [ @@ -57,11 +153,11 @@ ] } ], + "timestamp": "2026-02-02T10:23:52.23446844", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-02-02T10:23:52.23446844" + } }, "test-picard-collectmultiplemetrics-nofasta": { "content": [ @@ -89,10 +185,58 @@ ] } ], + "timestamp": "2026-02-02T10:23:27.387621193", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" - }, - "timestamp": "2026-02-02T10:23:27.387621193" + } + }, + "test-picard-collectmultiplemetrics-cram - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.alignment_summary_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle_metrics:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "pdf": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.insert_size_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_by_cycle.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.quality_distribution.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "test.CollectMultipleMetrics.read_length_histogram.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTMULTIPLEMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:32:57.11686549", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf index b8d1ee42..8048b2b6 100644 --- a/modules/nf-core/picard/collectwgsmetrics/main.nf +++ b/modules/nf-core/picard/collectwgsmetrics/main.nf @@ -1,11 +1,11 @@ process PICARD_COLLECTWGSMETRICS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' : - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" + container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/08/0861295baa7c01fc593a9da94e82b44a729dcaf8da92be8e565da109aa549b25/data' + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" input: tuple val(meta), path(bam), path(bai) ,path(fasta) ,path(fai), path(dict) @@ -13,32 +13,33 @@ process PICARD_COLLECTWGSMETRICS { output: tuple val(meta), path("*_metrics"), emit: metrics - tuple val("${task.process}"), val('picard'), eval("picard CollectWgsMetrics --version 2>&1 | sed -n 's/^Version:*//p'"), topic: versions, emit: versions_picard + tuple val("${task.process}"), val('picard'), eval("picard CollectWgsMetrics --version 2>&1 | sed -n 's/.*Version://p'"), topic: versions, emit: versions_picard when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def avail_mem = 3072 - def interval = intervallist ? "--INTERVALS ${intervallist}" : '' + def interval = intervallist ? "--INTERVALS ${intervallist}" : '' if (!task.memory) { - log.info '[Picard CollectWgsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.' - } else { - avail_mem = (task.memory.mega*0.8).intValue() + log.info('[Picard CollectWgsMetrics] Available memory not known - defaulting to 3GB. Specify process memory requirements to change this.') + } + else { + avail_mem = (task.memory.mega * 0.8).intValue() } """ export TMP=\$PWD picard \\ -Xmx${avail_mem}M \\ CollectWgsMetrics \\ - $args \\ - --INPUT $bam \\ + ${args} \\ + --INPUT ${bam} \\ --OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\ --REFERENCE_SEQUENCE ${fasta} \\ --TMP_DIR . \\ - $interval + ${interval} """ @@ -46,6 +47,5 @@ process PICARD_COLLECTWGSMETRICS { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.CollectWgsMetrics.coverage_metrics - """ } diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml index c59811d5..c5afe2e7 100644 --- a/modules/nf-core/picard/collectwgsmetrics/meta.yml +++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml @@ -76,10 +76,9 @@ output: - picard: type: string description: The tool name - - "picard CollectWgsMetrics --version 2>&1 | sed -n 's/^Version:*//p'": + - "picard CollectWgsMetrics --version 2>&1 | sed -n 's/.*Version://p'": type: string description: The command used to generate the version of the tool - topics: versions: - - ${task.process}: @@ -88,7 +87,7 @@ topics: - picard: type: string description: The tool name - - "picard CollectWgsMetrics --version 2>&1 | sed -n 's/^Version:*//p'": + - "picard CollectWgsMetrics --version 2>&1 | sed -n 's/.*Version://p'": type: string description: The command used to generate the version of the tool authors: diff --git a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff index c1389e4e..5de262d0 100644 --- a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff +++ b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff @@ -4,33 +4,37 @@ Changes in component 'nf-core/picard/collectwgsmetrics' Changes in 'picard/collectwgsmetrics/main.nf': --- modules/nf-core/picard/collectwgsmetrics/main.nf +++ modules/nf-core/picard/collectwgsmetrics/main.nf -@@ -8,9 +8,7 @@ - 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }" +@@ -8,10 +8,8 @@ + : 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6'}" input: - tuple val(meta), path(bam), path(bai) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) +- path intervallist + tuple val(meta), path(bam), path(bai) ,path(fasta) ,path(fai), path(dict) - path intervallist ++ path intervallist output: -@@ -31,6 +29,7 @@ - avail_mem = (task.memory.mega*0.8).intValue() + tuple val(meta), path("*_metrics"), emit: metrics +@@ -32,6 +30,7 @@ + avail_mem = (task.memory.mega * 0.8).intValue() } """ + export TMP=\$PWD picard \\ -Xmx${avail_mem}M \\ CollectWgsMetrics \\ -@@ -38,6 +37,7 @@ - --INPUT $bam \\ +@@ -39,7 +38,9 @@ + --INPUT ${bam} \\ --OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\ --REFERENCE_SEQUENCE ${fasta} \\ + --TMP_DIR . \\ - $interval - + ${interval} ++ """ + + stub: 'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap' is unchanged 'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test' is unchanged diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test index d6a60e6b..1bda5980 100644 --- a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test @@ -16,19 +16,18 @@ nextflow_process { process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), - ] - input[1] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = [] - + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [] """ } } @@ -37,10 +36,9 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), + file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } } @@ -51,19 +49,18 @@ nextflow_process { process { """ input[0] = [ [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - [] - ] - input[1] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] - input[2] = [ - [id:'genome'], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) - ] - input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true) - + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true) """ } } @@ -72,12 +69,70 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot( - file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), + file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'), process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + ).match()} ) } } + test("test-picard-collectwgsmetrics - stub") { + options "-stub" + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("test-picard-collectwgsmetrics-with-interval - stub") { + options "-stub" + when { + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [] + ] + input[1] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [id:'genome'], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true) + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } } diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap index 375c2ef9..79f1145f 100644 --- a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap +++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap @@ -1,7 +1,34 @@ { + "test-picard-collectwgsmetrics-with-interval - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.CollectWgsMetrics.coverage_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTWGSMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:35:04.636691319", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, "test-picard-collectwgsmetrics-with-interval": { "content": [ - true, + false, { "versions_picard": [ [ @@ -12,15 +39,42 @@ ] } ], + "timestamp": "2026-02-20T10:34:45.059411647", + "meta": { + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } + }, + "test-picard-collectwgsmetrics - stub": { + "content": [ + { + "metrics": [ + [ + { + "id": "test", + "single_end": false + }, + "test.CollectWgsMetrics.coverage_metrics:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_picard": [ + [ + "PICARD_COLLECTWGSMETRICS", + "picard", + "3.4.0" + ] + ] + } + ], + "timestamp": "2026-02-20T10:34:54.347278951", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-02-02T14:52:55.091876466" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "test-picard-collectwgsmetrics": { "content": [ - true, + false, { "versions_picard": [ [ @@ -31,10 +85,10 @@ ] } ], + "timestamp": "2026-02-20T10:34:25.744978033", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-02-02T14:52:11.334274481" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml index d1441570..3df5cfe7 100644 --- a/modules/nf-core/star/align/meta.yml +++ b/modules/nf-core/star/align/meta.yml @@ -49,12 +49,6 @@ input: - star_ignore_sjdbgtf: type: boolean description: Ignore annotation GTF file - - seq_platform: - type: string - description: Sequencing platform - - seq_center: - type: string - description: Sequencing center output: log_final: - - meta: diff --git a/modules/nf-core/star/align/star-align.diff b/modules/nf-core/star/align/star-align.diff index 0c9c6621..07d96b66 100644 --- a/modules/nf-core/star/align/star-align.diff +++ b/modules/nf-core/star/align/star-align.diff @@ -4,7 +4,7 @@ Changes in component 'nf-core/star/align' Changes in 'star/align/main.nf': --- modules/nf-core/star/align/main.nf +++ modules/nf-core/star/align/main.nf -@@ -8,10 +8,7 @@ +@@ -8,10 +8,9 @@ 'community.wave.seqera.io/library/htslib_samtools_star_gawk:ae438e9a604351a4' }" input: @@ -13,18 +13,24 @@ Changes in 'star/align/main.nf': - tuple val(meta3), path(gtf) - val star_ignore_sjdbgtf + tuple val(meta), path(reads, stageAs: "input*/*"), path(index), path(gtf) - val seq_platform - val seq_center ++ val seq_platform ++ val seq_center -@@ -46,7 +43,7 @@ + output: + tuple val(meta), path('*Log.final.out') , emit: log_final +@@ -44,8 +43,10 @@ def reads1 = [] def reads2 = [] meta.single_end ? [reads].flatten().each{ read -> reads1 << read} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v } - def ignore_gtf = star_ignore_sjdbgtf ? '' : "--sjdbGTFfile $gtf" +- attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' 'SM:$prefix'" + def ignore_gtf = gtf ? "--sjdbGTFfile $gtf" : '' - def seq_platform_arg = seq_platform ? "'PL:$seq_platform'" : "" - def seq_center_arg = seq_center ? "'CN:$seq_center'" : "" - attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center_arg 'SM:$prefix' $seq_platform_arg" ++ def seq_platform_arg = seq_platform ? "'PL:$seq_platform'" : "" ++ def seq_center_arg = seq_center ? "'CN:$seq_center'" : "" ++ attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center_arg 'SM:$prefix' $seq_platform_arg" + def out_sam_type = (args.contains('--outSAMtype')) ? '' : '--outSAMtype BAM Unsorted' + mv_unsorted_bam = (args.contains('--outSAMtype BAM Unsorted SortedByCoordinate')) ? "mv ${prefix}.Aligned.out.bam ${prefix}.Aligned.unsort.out.bam" : '' + """ 'modules/nf-core/star/align/tests/main.nf.test.snap' is unchanged 'modules/nf-core/star/align/tests/nextflow.arriba.config' is unchanged diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test index da0cc07e..d7c6ccbd 100644 --- a/modules/nf-core/star/align/tests/main.nf.test +++ b/modules/nf-core/star/align/tests/main.nf.test @@ -43,8 +43,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -108,8 +106,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -173,8 +169,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -237,8 +231,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -304,8 +296,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -367,8 +357,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -419,8 +407,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -471,8 +457,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -523,8 +507,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } @@ -577,8 +559,6 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.gtf', checkIfExists: true) ] ]) input[3] = false - input[4] = 'illumina' - input[5] = false """ } } diff --git a/nextflow.config b/nextflow.config index a5ceb27d..c3e162e8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -14,6 +14,7 @@ params { // References genome = null + genomes = [:] igenomes_base = '/references/' igenomes_ignore = false @@ -64,7 +65,6 @@ includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_ profiles { debug { - dumpHashes = true process.beforeScript = 'echo $HOSTNAME' cleanup = false nextflow.enable.configProcessNamesValidation = true @@ -108,7 +108,7 @@ profiles { singularity.ociAutoPull = true wave.enabled = true wave.freeze = true - wave.strategy = 'conda,container' + wave.strategy = ["conda", "container"] } emulate_amd64 { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' @@ -165,7 +165,7 @@ profiles { singularity.ociAutoPull = true wave.enabled = true wave.freeze = true - wave.strategy = 'conda,container' + wave.strategy = ["conda", "container"] } gpu { docker.runOptions = '-u $(id -u):$(id -g) --gpus all' @@ -211,7 +211,7 @@ env { } // Set bash options -process.shell = ["bash", "-C", "-e", "-u", "-o", "pipefail"] +process.shell = ["bash", "-C", "-e", "-u", "-o", "pipefail"].join(' ') // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -234,7 +234,7 @@ trace { dag { enabled = true overwrite = true - file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html" + file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.mmd" } manifest { @@ -262,7 +262,7 @@ manifest { mainScript = 'main.nf' defaultBranch = 'main' nextflowVersion = '!>=25.10.0' - version = '3.0.0dev' + version = '3.0.0' doi = '' } diff --git a/nf-test.config b/nf-test.config index c5d343b4..bda04274 100644 --- a/nf-test.config +++ b/nf-test.config @@ -12,7 +12,7 @@ config { ignore = ['modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'] // run all test with defined profile(s) from the main nextflow.config - profile = "test" + profile = "test,s3_ugent" // list of filenames or patterns that should be trigger a full test run triggers = ['nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore'] diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 1d3d46af..40119c7b 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -21,9 +21,9 @@ { "@id": "./", "@type": "Dataset", - "creativeWorkStatus": "InProgress", - "datePublished": "2026-02-09T13:16:20+00:00", - "description": "# nf-cmgg/preprocessing\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[![GitHub Actions CI Status](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-cmgg/preprocessing)\n\n## Introduction\n\n**nf-cmgg/preprocessing** is a bioinformatics pipeline that demultiplexes and aligns raw sequencing data.\nIt also performs basic QC and coverage analysis.\n\nThe pipeline is built using Nextflow, a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible.\n\nSteps inlcude:\n\n1. Demultiplexing using [`BCLconvert`](https://emea.support.illumina.com/sequencing/sequencing_software/bcl-convert.html)\n2. Read QC and trimming using [`fastp`](https://github.com/OpenGene/fastp)\n3. Alignment using either [`bwa`](https://github.com/lh3/bwa), [`bwa-mem2`](https://github.com/bwa-mem2/bwa-mem2), [`bowtie2`](https://github.com/BenLangmead/bowtie2), [`dragmap`](https://github.com/Illumina/DRAGMAP), [`snap`](https://github.com/amplab/snap) or [`strobe`](https://github.com/ksahlin/strobealign) for DNA-seq and [`STAR`](https://github.com/alexdobin/STAR) for RNA-seq\n4. Duplicate marking using [`bamsormadup`](https://gitlab.com/german.tischler/biobambam2) or [`samtools markdup`](http://www.htslib.org/doc/samtools-markdup.html)\n5. Coverage analysis using [`mosdepth`](https://github.com/brentp/mosdepth) and [`samtools coverage`](http://www.htslib.org/doc/samtools-coverage.html)\n6. Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollecHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics)\n7. QC aggregation using [`multiqc`](https://multiqc.info/)\n\n![metro map](docs/images/metro_map.png)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nThe full documentation can be found [here](docs/README.md)\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n`samplesheet.csv` for fastq inputs:\n\n```csv\nid,samplename,organism,library,aligner,fastq_1,fastq_2\nsample1,sample1,Homo sapiens,Library_Name,bwamem,reads1.fq.gz,reads2.fq.gz\n```\n\n`samplesheet.csv` for flowcell inputs:\n\n```csv\nid,samplesheet,lane,flowcell,sample_info\nflowcell_id,/path/to/illumina_samplesheet.csv,1,/path/to/sequencer_uploaddir,/path/to/sampleinfo.csv\n```\n\n`sampleinfo.csv` for use with flowcell inputs:\n\n```csv\nsamplename,library,organism,tag,aligner\nfc_sample1,test,Homo sapiens,WES,bwamem\n```\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-cmgg/preprocessing \\\n -profile \\\n --igenomes_base /path/to/genomes \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_;\n> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files).\n\n## Credits\n\nnf-cmgg/preprocessing was originally written by the CMGG ICT team.\n\n## Support\n\nThis pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/master/LICENSE).\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "creativeWorkStatus": "Stable", + "datePublished": "2026-03-04T08:40:34+00:00", + "description": "# nf-cmgg/preprocessing\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[![GitHub Actions CI Status](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml/badge.svg)](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml/badge.svg)](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.10.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-cmgg/preprocessing)\n\n## Introduction\n\n**nf-cmgg/preprocessing** is a bioinformatics pipeline that demultiplexes and aligns raw sequencing data.\nIt also performs basic QC and coverage analysis.\n\nThe pipeline is built using Nextflow, a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible.\n\nSteps inlcude:\n\n1. Demultiplexing using [`BCLconvert`](https://emea.support.illumina.com/sequencing/sequencing_software/bcl-convert.html)\n2. Read QC and trimming using [`fastp`](https://github.com/OpenGene/fastp)\n3. Alignment using either [`bwa`](https://github.com/lh3/bwa), [`bwa-mem2`](https://github.com/bwa-mem2/bwa-mem2), [`bowtie2`](https://github.com/BenLangmead/bowtie2), [`dragmap`](https://github.com/Illumina/DRAGMAP), [`snap`](https://github.com/amplab/snap) or [`strobe`](https://github.com/ksahlin/strobealign) for DNA-seq and [`STAR`](https://github.com/alexdobin/STAR) for RNA-seq\n4. Duplicate marking using [`bamsormadup`](https://gitlab.com/german.tischler/biobambam2) or [`samtools markdup`](http://www.htslib.org/doc/samtools-markdup.html)\n5. Coverage analysis using [`mosdepth`](https://github.com/brentp/mosdepth) and [`samtools coverage`](http://www.htslib.org/doc/samtools-coverage.html)\n6. Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollecHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics)\n7. QC aggregation using [`multiqc`](https://multiqc.info/)\n\n![metro map](docs/images/metro_map.png)\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nThe full documentation can be found [here](docs/README.md)\n\nFirst, prepare a samplesheet with your input data that looks as follows:\n\n`samplesheet.csv` for fastq inputs:\n\n```csv\nid,samplename,organism,library,aligner,fastq_1,fastq_2\nsample1,sample1,Homo sapiens,Library_Name,bwamem,reads1.fq.gz,reads2.fq.gz\n```\n\n`samplesheet.csv` for flowcell inputs:\n\n```csv\nid,samplesheet,lane,flowcell,sample_info\nflowcell_id,/path/to/illumina_samplesheet.csv,1,/path/to/sequencer_uploaddir,/path/to/sampleinfo.csv\n```\n\n`sampleinfo.csv` for use with flowcell inputs:\n\n```csv\nsamplename,library,organism,tag,aligner\nfc_sample1,test,Homo sapiens,WES,bwamem\n```\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run nf-cmgg/preprocessing \\\n -profile \\\n --igenomes_base /path/to/genomes \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_;\n> see [docs](https://nf-co.re/usage/configuration#custom-configuration-files).\n\n## Credits\n\nnf-cmgg/preprocessing was originally written by the CMGG ICT team.\n\n## Support\n\nThis pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/master/LICENSE).\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -105,7 +105,7 @@ }, "mentions": [ { - "@id": "#e939b96d-700d-40a2-9ff8-added4e0ade4" + "@id": "#a7d7e3e1-4abb-45b6-8465-8056924d5808" } ], "name": "nf-cmgg/preprocessing" @@ -134,14 +134,14 @@ ], "creator": [ { - "@id": "https://orcid.org/0000-0003-2555-3114" + "@id": "https://orcid.org/0009-0003-5619-1555" }, { - "@id": "https://orcid.org/0009-0003-5619-1555" + "@id": "https://orcid.org/0000-0003-2555-3114" } ], "dateCreated": "", - "dateModified": "2026-02-09T14:16:20Z", + "dateModified": "2026-03-04T09:40:34Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "image": { "@id": "docs/images/metro_map.png" @@ -169,10 +169,10 @@ }, "url": [ "https://github.com/nf-cmgg/preprocessing", - "https://nf-co.re/nf-cmgg/preprocessing/dev/" + "https://nf-co.re/nf-cmgg/preprocessing/3.0.0/" ], "version": [ - "3.0.0dev" + "3.0.0" ] }, { @@ -196,11 +196,11 @@ "name": "Workflow diagram" }, { - "@id": "#e939b96d-700d-40a2-9ff8-added4e0ade4", + "@id": "#a7d7e3e1-4abb-45b6-8465-8056924d5808", "@type": "TestSuite", "instance": [ { - "@id": "#a6c6a5a5-b7e8-4825-8dce-3f467dbc2c91" + "@id": "#61347af5-7167-4ebd-a8c0-2b36f46308d1" } ], "mainEntity": { @@ -209,7 +209,7 @@ "name": "Test suite for nf-cmgg/preprocessing" }, { - "@id": "#a6c6a5a5-b7e8-4825-8dce-3f467dbc2c91", + "@id": "#61347af5-7167-4ebd-a8c0-2b36f46308d1", "@type": "TestInstance", "name": "GitHub Actions workflow for testing nf-cmgg/preprocessing", "resource": "repos/nf-cmgg/preprocessing/actions/workflows/nf-test.yml", @@ -342,17 +342,17 @@ "name": "nf-core", "url": "https://nf-co.re/" }, - { - "@id": "https://orcid.org/0000-0003-2555-3114", - "@type": "Person", - "email": "11850640+matthdsm@users.noreply.github.com", - "name": "Matthias De Smet" - }, { "@id": "https://orcid.org/0009-0003-5619-1555", "@type": "Person", "email": "101190534+nvnieuwk@users.noreply.github.com", "name": "Nicolas Vannieuwkerke" + }, + { + "@id": "https://orcid.org/0000-0003-2555-3114", + "@type": "Person", + "email": "11850640+matthdsm@users.noreply.github.com", + "name": "Matthias De Smet" } ] } \ No newline at end of file diff --git a/subworkflows/local/utils_nfcmgg_preprocessing_pipeline/main.nf b/subworkflows/local/utils_nfcmgg_preprocessing_pipeline/main.nf new file mode 100644 index 00000000..a20d0849 --- /dev/null +++ b/subworkflows/local/utils_nfcmgg_preprocessing_pipeline/main.nf @@ -0,0 +1,95 @@ +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SUBWORKFLOWS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// Mock subworkflow to please linting +workflow UTILS_NFCMGG_PREPROCESSING_PIPELINE { +} + +/* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + FUNCTIONS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*/ + +// +// Generate readgroup information from FASTQ header +// +def getReadgroupFromFastq(fastq, SM, LB, CN) { + // expected format: + // xx:yy:FLOWCELLID:LANE:... (seven fields) + // or + // FLOWCELLID:LANE:xx:... (five fields) + def line + fastq.withInputStream { fq -> + def isGzip = fastq.name.toString().endsWith('.gz') + def stream = isGzip ? new java.util.zip.GZIPInputStream(fq) as InputStream : fq as InputStream + def decoder = new InputStreamReader(stream, 'ASCII') + def buffered = new BufferedReader(decoder) + line = buffered.readLine() + } + assert line.startsWith('@') + line = line.substring(1) + def fields = line.split(':') + def rg = [:] + rg.LB = LB ?: '' + rg.CN = CN ?: '' + rg.PL = 'ILLUMINA' + rg.SM = SM ?: fastq.name.toString() - ~/_R[0-9]_001.*$/ + if (fields.size() >= 7) { + // CASAVA 1.8+ format, from https://support.illumina.com/help/BaseSpace_OLH_009008/Content/Source/Informatics/BS/FileFormat_FASTQ-files_swBS.htm + // "@::::::: :::" + // def sequencer_serial = fields[0] + // def run_number = fields[1] + def fcid = fields[2] + def lane = fields[3] + def index = fields[-1] ==~ /^[GATCN+-]+$/ ? fields[-1] : '' + rg.ID = [index ?: fcid, lane].join('.') + rg.PU = [fcid, lane].join('.') + } + else if (fields.size() == 5) { + def fcid = fields[0] + def lane = fields[1] + rg.ID = [fcid, lane].join('.') + rg.PU = [fcid, lane].join('.') + } + return rg +} + +// +// Generate readgroup from bclconvert outputs +// +def getReadgroupsFromBclconvert(ch_fastq_list_csv, ch_fastq) { + return ch_fastq_list_csv + .join(ch_fastq, by: [0]) + .map { meta, csv_file, fastq_list -> + def meta_fastq = [] + csv_file + .splitCsv(header: true) + .each { row -> + // Create the readgroup tuple + // RGID,RGSM,RGLB,Lane,Read1File,Read2File + def rg = [:] + // row.RGID is index1.index2.lane + rg.ID = row.RGID + // RGPU is a custom column in the samplesheet containing the flowcell ID + rg.PU = row.RGPU ? row.RGPU : meta.id + "." + row.Lane + rg.SM = row.RGSM + rg.LB = row.RGLB ? row.RGLB : "" + rg.PL = "ILLUMINA" + + // dereference the fastq files in the csv + def fastq1 = fastq_list.find { fq -> file(fq).name == file(row.Read1File).name } + def fastq2 = row.Read2File ? fastq_list.find { fq -> file(fq).name == file(row.Read2File).name } : null + + // set fastq metadata + def new_meta = meta + [id: fastq1.getSimpleName().toString() - ~/_R[0-9]_001.*$/, readgroup: rg, single_end: !fastq2] + + meta_fastq << [new_meta, fastq2 ? [fastq1, fastq2] : [fastq1]] + } + return meta_fastq + } + .flatMap() +} diff --git a/subworkflows/local/utils_nfcmgg_preprocessing_pipeline/meta.yml b/subworkflows/local/utils_nfcmgg_preprocessing_pipeline/meta.yml new file mode 100644 index 00000000..e69de29b diff --git a/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff b/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff index f2a4356b..2f585e04 100644 --- a/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff +++ b/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff @@ -17,9 +17,9 @@ Changes in 'fastq_align_dna/main.nf': main: -- ch_bam_index = Channel.empty() -- ch_bam = Channel.empty() -- ch_reports = Channel.empty() +- ch_bam_index = channel.empty() +- ch_bam = channel.empty() +- ch_reports = channel.empty() + ch_bam_index = channel.empty() + ch_bam = channel.empty() + ch_reports = channel.empty() diff --git a/tests/config/igenomes_test.config b/tests/config/igenomes_test.config index 5ecb24af..e71fec6f 100644 --- a/tests/config/igenomes_test.config +++ b/tests/config/igenomes_test.config @@ -11,12 +11,3 @@ params { } } } - -aws { - client { - endpoint = "https://s3.ugent.be" - protocol = "https" - s3PathStyleAccess = true - connectionTimeout = 60000 - } -} diff --git a/tests/config/nf-test.config b/tests/config/nf-test.config index c24e5c2f..88f7efd5 100644 --- a/tests/config/nf-test.config +++ b/tests/config/nf-test.config @@ -5,12 +5,3 @@ process { time: 6.h, ] } - -aws { - client { - endpoint = "https://s3.ugent.be" - protocol = "https" - s3PathStyleAccess = true - connectionTimeout = 60000 - } -} diff --git a/tests/default.nf.test b/tests/default.nf.test index 66a790d4..d32cc960 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -7,43 +7,11 @@ nextflow_pipeline { tag "pipeline" tag "pipeline/main" - test("main - fastq input") { + test("main") { when { params { - input = "${projectDir}/tests/inputs/fastq.yml" - igenomes_base = "s3://reference-data/genomes" - outdir = "$outputDir" - } - } - - then { - assert workflow.success - } - - } - - test("main - flowcell input") { - - when { - params { - input = "${projectDir}/tests/inputs/flowcell.yml" - igenomes_base = "s3://reference-data/genomes" - outdir = "$outputDir" - } - } - - then { - assert workflow.success - } - - } - - test("main - fastq RNA input") { - - when { - params { - input = "${projectDir}/tests/inputs/fastq_rna.yml" + input = "${projectDir}/tests/inputs/test.yml" igenomes_base = "s3://reference-data/genomes" outdir = "$outputDir" } diff --git a/tests/inputs/fastq.yml b/tests/inputs/fastq.yml deleted file mode 100644 index 8195b58b..00000000 --- a/tests/inputs/fastq.yml +++ /dev/null @@ -1,22 +0,0 @@ ---- -# fastq inputs -- id: sample1_L001 - samplename: fastq_paired1 - library: test_library - organism: Homo sapiens - tag: WES - aligner: bwamem - markdup: bamsormadup - run_coverage: true - fastq_1: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz - fastq_2: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R2.fastq.gz -- id: sample1_L002 - samplename: fastq_paired1 - library: test_library - organism: Homo sapiens - tag: WES - aligner: bwamem - markdup: bamsormadup - run_coverage: true - fastq_1: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R1.fastq.gz - fastq_2: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R2.fastq.gz diff --git a/tests/inputs/fastq_rna.yml b/tests/inputs/fastq_rna.yml deleted file mode 100644 index 3945eb53..00000000 --- a/tests/inputs/fastq_rna.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -# fastq inputs -- id: sample1_L001 - samplename: fastq_paired1 - library: test_library - organism: Homo sapiens - tag: WES - sample_type: RNA - aligner: star - markdup: bamsormadup - run_coverage: true - fastq_1: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz - fastq_2: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R2.fastq.gz -- id: sample1_L002 - samplename: fastq_paired1 - library: test_library - organism: Homo sapiens - tag: WES - sample_type: RNA - aligner: star - markdup: bamsormadup - run_coverage: true - fastq_1: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R1.fastq.gz - fastq_2: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R2.fastq.gz diff --git a/tests/inputs/flowcell.yml b/tests/inputs/flowcell.yml deleted file mode 100644 index 4711c5b9..00000000 --- a/tests/inputs/flowcell.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- id: 200624_A00834_0183_BHMTFYDRXX - samplesheet: https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleSheet_2.csv - lane: 1 - flowcell: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/200624_A00834_0183_BHMTFYDRXX.tar.gz - sample_info: https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleInfo_2.json diff --git a/tests/inputs/test.yml b/tests/inputs/test.yml new file mode 100644 index 00000000..3a432b4b --- /dev/null +++ b/tests/inputs/test.yml @@ -0,0 +1,51 @@ +--- +# flowcell inputs +- id: 200624_A00834_0183_BHMTFYDRXX + samplesheet: https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleSheet_2.csv + lane: 1 + flowcell: s3://test-data/genomics/homo_sapiens/illumina/bcl/ + sample_info: https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleInfo_2.json +# DNA fastq inputs +- id: DNA1_L001 + samplename: DNA_paired1 + library: test_library + organism: Homo sapiens + tag: WES + aligner: bwamem + markdup: bamsormadup + run_coverage: true + fastq_1: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz + fastq_2: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R2.fastq.gz +- id: DNA1_L002 + samplename: DNA_paired1 + library: test_library + organism: Homo sapiens + tag: WES + aligner: bwamem + markdup: bamsormadup + run_coverage: true + fastq_1: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R1.fastq.gz + fastq_2: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R2.fastq.gz +# RNA fastq inputs +- id: RNA1_L001 + samplename: RNA_paired1 + library: test_library + organism: Homo sapiens + tag: WES + sample_type: RNA + aligner: star + markdup: bamsormadup + run_coverage: true + fastq_1: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz + fastq_2: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R2.fastq.gz +- id: RNA1_L002 + samplename: RNA_paired1 + library: test_library + organism: Homo sapiens + tag: WES + sample_type: RNA + aligner: star + markdup: bamsormadup + run_coverage: true + fastq_1: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R1.fastq.gz + fastq_2: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R2.fastq.gz diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test index 4d5e52cc..d8bac5f5 100644 --- a/tests/workflows/preprocessing.nf.test +++ b/tests/workflows/preprocessing.nf.test @@ -49,6 +49,12 @@ nextflow_workflow { ] // genelists input[2] = null + // mqc_config + input[3] = [file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)] + // mqc_logo + input[4] = [] + // mqc methods description + input[5] = null """ } } @@ -57,12 +63,12 @@ nextflow_workflow { assert workflow.success assert snapshot( sanitizeOutput(workflow.out, unstableKeys:[ - "multiqc_main_report", - "multiqc_main_data", - "multiqc_main_plots", - "multiqc_library_report", - "multiqc_library_data", - "multiqc_library_plots", + "multiqc_report", + "multiqc_data", + "multiqc_plots", + "multiqcsav_report", + "multiqcsav_data", + "multiqcsav_plots", "md5sums", "fastp_html", "crams", @@ -119,6 +125,12 @@ nextflow_workflow { ] // genelists input[2] = null + // mqc_config + input[3] = [file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)] + // mqc_logo + input[4] = [] + // mqc methods description + input[5] = null """ } } @@ -127,12 +139,12 @@ nextflow_workflow { assert workflow.success assert snapshot( sanitizeOutput(workflow.out, unstableKeys:[ - "multiqc_main_report", - "multiqc_main_data", - "multiqc_main_plots", - "multiqc_library_report", - "multiqc_library_data", - "multiqc_library_plots", + "multiqc_report", + "multiqc_data", + "multiqc_plots", + "multiqcsav_report", + "multiqcsav_data", + "multiqcsav_plots", "md5sums", "fastp_html", "crams", @@ -194,6 +206,12 @@ nextflow_workflow { ] // genelists input[2] = null + // mqc_config + input[3] = [file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)] + // mqc_logo + input[4] = [] + // mqc methods description + input[5] = null """ } } @@ -202,12 +220,12 @@ nextflow_workflow { assert workflow.success assert snapshot( sanitizeOutput(workflow.out, unstableKeys:[ - "multiqc_main_report", - "multiqc_main_data", - "multiqc_main_plots", - "multiqc_library_report", - "multiqc_library_data", - "multiqc_library_plots", + "multiqc_report", + "multiqc_data", + "multiqc_plots", + "multiqcsav_report", + "multiqcsav_data", + "multiqcsav_plots", "md5sums", "fastp_html", "crams", @@ -222,4 +240,79 @@ nextflow_workflow { ).match() } } + + test("preprocessing - flowcell - bwa - bamsormadup - roi") { + when { + workflow { + """ + // ch_samplesheet + input[0] = Channel.of( + [ + [ // meta + id: "200624_A00834_0183_BHMTFYDRXX", + lane: 1, + ], + [], // fastq_1 + [], // fastq_2 + file("https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleSheet_2.csv", checkIfExists: true), + file("https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleInfo_2.json", checkIfExists: true), + file("s3://test-data/genomics/homo_sapiens/illumina/bcl", checkIfExists: true) + + ] + ) + // genomes + input[1] = [ + GRCh38: [ + fasta: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna", + fai: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai", + dict: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict", + bwamem: "s3://test-data/genomics/homo_sapiens/genome/bwa/", + gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf" + ] + ] + // genelists + input[2] = null + // mqc_config + input[3] = [file("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)] + // mqc_logo + input[4] = [] + // mqc methods description + input[5] = null + """ + } + } + + then { + assert workflow.success + assert snapshot( + sanitizeOutput(workflow.out, unstableKeys:[ + "demultiplex_logs", + "demultiplex_reports", + "multiqc_report", + "multiqc_data", + "multiqc_plots", + "multiqcsav_report", + "multiqcsav_data", + "multiqcsav_plots", + "md5sums", + "fastp_html", + "crams", + "picard_wgsmetrics", + "picard_multiplemetrics_pdf", + "picard_multiplemetrics", + "picard_hsmetrics", + "samtools_flagstat", + "samtools_coverage", + "samtools_stats" + ]).collectEntries { key, value -> + if (key in ["demultiplex_logs", "demultiplex_reports"]) { + [ key: value.sort() ] + } else { + [ key: value ] + } + } + ).match() + } + } + } diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap index e6421b43..f1d096fa 100644 --- a/tests/workflows/preprocessing.nf.test.snap +++ b/tests/workflows/preprocessing.nf.test.snap @@ -71,7 +71,7 @@ "markdup": "bamsormadup", "organism": "Homo sapiens", "readgroup": { - "CN": "CMGG", + "CN": "", "ID": "H5T2YDSX3.1", "LB": "test", "PL": "ILLUMINA", @@ -103,12 +103,12 @@ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", "single_end": false, "readgroup": { - "CN": "CMGG", - "ID": "H5T2YDSX3.1", - "PU": "H5T2YDSX3.1", + "LB": "test", + "CN": "", "PL": "ILLUMINA", "SM": "sample1", - "LB": "test" + "ID": "H5T2YDSX3.1", + "PU": "H5T2YDSX3.1" }, "genome": "GRCh38", "genome_data": { @@ -422,28 +422,38 @@ "mosdepth_thresholds_csi": [ ], - "multiqc_library_data": [ - "test_data" + "multiqc_data": [ + [ + { + "id": "test" + }, + "test_data" + ] ], - "multiqc_library_plots": [ + "multiqc_plots": [ ], - "multiqc_library_report": [ - "test.html" + "multiqc_report": [ + [ + { + "id": "test" + }, + "test.html" + ] ], - "multiqc_main_data": [ + "multiqcsav_data": [ [ - "multiqc_data" + ] ], - "multiqc_main_plots": [ + "multiqcsav_plots": [ [ ] ], - "multiqc_main_report": [ + "multiqcsav_report": [ [ - "multiqc.html" + ] ], "panelcoverage": [ @@ -706,7 +716,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.4" }, - "timestamp": "2026-02-11T21:21:37.068608" + "timestamp": "2026-03-05T14:04:31.848677" }, "preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": { "content": [ @@ -782,7 +792,7 @@ "markdup": "bamsormadup", "organism": "Homo sapiens", "readgroup": { - "CN": "CMGG", + "CN": "", "ID": "H5T2YDSX3.1", "LB": "test", "PL": "ILLUMINA", @@ -815,12 +825,12 @@ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", "single_end": false, "readgroup": { - "CN": "CMGG", - "ID": "H5T2YDSX3.1", - "PU": "H5T2YDSX3.1", + "LB": "test", + "CN": "", "PL": "ILLUMINA", "SM": "sample1", - "LB": "test" + "ID": "H5T2YDSX3.1", + "PU": "H5T2YDSX3.1" }, "genome": "GRCh38", "genome_data": { @@ -901,28 +911,38 @@ "mosdepth_thresholds_csi": [ ], - "multiqc_library_data": [ - "test_data" + "multiqc_data": [ + [ + { + "id": "test" + }, + "test_data" + ] ], - "multiqc_library_plots": [ + "multiqc_plots": [ ], - "multiqc_library_report": [ - "test.html" + "multiqc_report": [ + [ + { + "id": "test" + }, + "test.html" + ] ], - "multiqc_main_data": [ + "multiqcsav_data": [ [ - "multiqc_data" + ] ], - "multiqc_main_plots": [ + "multiqcsav_plots": [ [ ] ], - "multiqc_main_report": [ + "multiqcsav_report": [ [ - "multiqc.html" + ] ], "panelcoverage": [ @@ -1075,7 +1095,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.4" }, - "timestamp": "2026-02-11T21:25:53.804729" + "timestamp": "2026-03-05T14:08:24.880945" }, "preprocessing - fastq - bwa - bamsormadup - no roi": { "content": [ @@ -1148,7 +1168,7 @@ "markdup": "bamsormadup", "organism": "Homo sapiens", "readgroup": { - "CN": "CMGG", + "CN": "", "ID": "H5T2YDSX3.1", "LB": "test", "PL": "ILLUMINA", @@ -1178,12 +1198,12 @@ "run_coverage": true, "single_end": false, "readgroup": { - "CN": "CMGG", - "ID": "H5T2YDSX3.1", - "PU": "H5T2YDSX3.1", + "LB": "test", + "CN": "", "PL": "ILLUMINA", "SM": "sample1", - "LB": "test" + "ID": "H5T2YDSX3.1", + "PU": "H5T2YDSX3.1" }, "genome": "GRCh38", "genome_data": { @@ -1412,28 +1432,38 @@ "mosdepth_thresholds_csi": [ ], - "multiqc_library_data": [ - "test_data" + "multiqc_data": [ + [ + { + "id": "test" + }, + "test_data" + ] ], - "multiqc_library_plots": [ + "multiqc_plots": [ ], - "multiqc_library_report": [ - "test.html" + "multiqc_report": [ + [ + { + "id": "test" + }, + "test.html" + ] ], - "multiqc_main_data": [ + "multiqcsav_data": [ [ - "multiqc_data" + ] ], - "multiqc_main_plots": [ + "multiqcsav_plots": [ [ ] ], - "multiqc_main_report": [ + "multiqcsav_report": [ [ - "multiqc.html" + ] ], "panelcoverage": [ @@ -1685,9 +1715,68 @@ } ], "meta": { - "nf-test": "0.9.4", + "nf-test": "0.9.3", + "nextflow": "25.10.4" + }, + "timestamp": "2026-03-05T14:07:05.010944" + }, + "preprocessing - flowcell - bwa - bamsormadup - roi": { + "content": [ + { + "key": [ + [ + { + "groupSize": 1, + "groupTarget": { + "single_end": true, + "samplename": "Sample1", + "sample_type": "DNA", + "library": "test", + "tag": "WES", + "purpose": [ + + ], + "organism": "Homo sapiens", + "genome": "GRCh38", + "vivar_project": [ + + ], + "binsize": [ + + ], + "panels": [ + + ], + "aligner": "bwamem", + "markdup": "bamsormadup", + "umi_aware": false, + "skip_trimming": false, + "trim_front": 0, + "trim_tail": 0, + "adapter_R1": null, + "adapter_R2": null, + "run_coverage": true, + "disable_picard_metrics": true, + "roi": null, + "genome_data": { + "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna", + "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai", + "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict", + "bwamem": "s3://test-data/genomics/homo_sapiens/genome/bwa/", + "gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf" + }, + "id": "Sample1" + } + }, + "Sample1.merged.metrics.txt:md5,f23933cc5957694d2286bdae22039097" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.3", "nextflow": "25.10.4" }, - "timestamp": "2026-02-18T15:49:18.459258" + "timestamp": "2026-03-05T14:02:04.847019" } } \ No newline at end of file diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf index 225c1ba4..d654dfd5 100644 --- a/workflows/preprocessing.nf +++ b/workflows/preprocessing.nf @@ -1,4 +1,4 @@ -include { samplesheetToList } from 'plugin/nf-schema' +include { samplesheetToList } from 'plugin/nf-schema' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -7,26 +7,27 @@ include { samplesheetToList } from 'plugin/nf-schema' */ // Modules -include { BCLCONVERT } from '../modules/nf-core/bclconvert/main' -include { FALCO } from '../modules/nf-core/falco/main' -include { FASTP } from '../modules/nf-core/fastp/main' -include { MD5SUM } from '../modules/nf-core/md5sum/main' -include { MULTIQC as MULTIQC_LIBRARY } from '../modules/nf-core/multiqc/main' -include { MULTIQC as MULTIQC_MAIN } from '../modules/nf-core/multiqc/main' -include { SAMTOOLS_COVERAGE } from '../modules/nf-core/samtools/coverage/main' +include { BCLCONVERT } from '../modules/nf-core/bclconvert' +include { FALCO } from '../modules/nf-core/falco' +include { FASTP } from '../modules/nf-core/fastp' +include { MD5SUM } from '../modules/nf-core/md5sum' +include { MULTIQC } from '../modules/nf-core/multiqc' +include { MULTIQCSAV } from '../modules/nf-core/multiqcsav' +include { SAMTOOLS_COVERAGE } from '../modules/nf-core/samtools/coverage' // Subworkflows -include { BAM_QC } from '../subworkflows/local/bam_qc/main' -include { COVERAGE } from '../subworkflows/local/coverage/main' -include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main' +include { BAM_QC } from '../subworkflows/local/bam_qc' +include { COVERAGE } from '../subworkflows/local/coverage' +include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram' // Functions -include { generateReadgroup } from '../modules/nf-core/bclconvert/main' -include { paramsSummaryMap } from 'plugin/nf-schema' -include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_preprocessing_pipeline' -include { getGenomeAttribute } from '../subworkflows/local/utils_nfcore_preprocessing_pipeline' +include { getReadgroupsFromBclconvert } from '../subworkflows/local/utils_nfcmgg_preprocessing_pipeline' +include { getReadgroupFromFastq } from '../subworkflows/local/utils_nfcmgg_preprocessing_pipeline' +include { paramsSummaryMap } from 'plugin/nf-schema' +include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_preprocessing_pipeline' +include { getGenomeAttribute } from '../subworkflows/local/utils_nfcore_preprocessing_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -39,6 +40,9 @@ workflow PREPROCESSING { ch_samplesheet // channel: samplesheet read in from --input genomes // map: genome reference files genelists // file: directory containing genelist bed files for coverage analysis + multiqc_config // file(s): MultiQC config file(s) + multiqc_logo // file: MultiQC logo file + multiqc_methods_description // file: custom methods description for MultiQC report main: ch_multiqc_files = channel.empty() @@ -46,7 +50,7 @@ workflow PREPROCESSING { ch_samplesheet .branch { meta, fastq_1, fastq_2, samplesheet, sampleinfo, flowcell -> illumina_flowcell: (flowcell && samplesheet && sampleinfo) && !(fastq_1 || fastq_2) - return [meta, samplesheet, sampleinfo, flowcell] + return [["id": meta.id, "lane": meta.lane], samplesheet, sampleinfo, flowcell] fastq: (fastq_1) && !(flowcell || samplesheet || sampleinfo) return [meta, [fastq_1, fastq_2].findAll()] other: true @@ -72,34 +76,50 @@ workflow PREPROCESSING { // BCLCONVERT([meta, samplesheet, flowcell]) BCLCONVERT(ch_illumina_flowcell.flowcell) BCLCONVERT.out.fastq.dump(tag: "DEMULTIPLEX: fastq", pretty: true) - ch_multiqc_files = ch_multiqc_files.mix( - BCLCONVERT.out.reports, - BCLCONVERT.out.logs, - ) - generateReadgroup( + getReadgroupsFromBclconvert( BCLCONVERT.out.reports.map { meta, reports -> - return [meta, reports.find { report -> report.name == "fastq_list.csv" }] + return [meta, file(reports).resolve("fastq_list.csv")] }, BCLCONVERT.out.fastq, - ).set { ch_fastq_with_meta } - ch_fastq_with_meta.dump(tag: "DEMULTIPLEX: fastq with meta", pretty: true) + ).dump(tag: "DEMULTIPLEX: fastq with meta", pretty: true).map { meta, fastq -> [meta.readgroup.SM, meta, fastq] }.set { ch_demultiplexed_fastq } + + // Run QC + ch_mqcsav_input = ch_illumina_flowcell.flowcell + .map { meta, _samplesheet, flowcell -> + def interop = files(flowcell.resolve("InterOp/*.bin"), checkIfExists: true) + def xml = files(flowcell.resolve("*.xml"), checkIfExists: true) + return [meta, xml, interop] + } + .join(BCLCONVERT.out.reports, by: 0) + .map { meta, xml, interop, reports -> + return [meta - meta.subMap(['lane']), xml, interop, reports] + } + .groupTuple(by: [0]) + .map { meta, xml, interop, reports -> + return [meta, xml.flatten().unique(), interop.flatten().unique(), reports.flatten(), multiqc_config, multiqc_logo, [], []] + } + .dump(tag: "MULTIQC SAV input", pretty: true) - ch_fastq_with_meta.map { meta, fastq -> [meta.readgroup.SM, meta, fastq] }.set { ch_demultiplexed_fastq } + MULTIQCSAV( + ch_mqcsav_input + ) + // Merge fastq meta with sample info ch_illumina_flowcell.info .flatten() .transpose() .map { sampleinfo -> [sampleinfo.samplename, sampleinfo] } .set { ch_sampleinfo } - // Merge fastq meta with sample info ch_demultiplexed_fastq .combine(ch_sampleinfo, by: 0) .map { _samplename, meta, fastq, sampleinfo -> + def new_rg = [:] if (sampleinfo.library) { new_rg = meta.readgroup + ['LB': sampleinfo.library] - } else { + } + else { new_rg = meta.readgroup } def new_meta = meta + sampleinfo + ['readgroup': new_rg] @@ -114,6 +134,7 @@ workflow PREPROCESSING { other: true } .set { ch_demultiplexed_fastq_with_sampleinfo } + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // PROCESS FASTQ INPUTS @@ -125,15 +146,9 @@ workflow PREPROCESSING { // if no fastq_2, then single-end def single_end = fastq[1] ? false : true // add readgroup metadata - def rg = readgroup_from_fastq(fastq[0]) // if the sample name starts with "snp_", remove it so the sampletracking works later on. def samplename = meta.samplename.startsWith("snp_") ? meta.samplename.substring(4) : meta.samplename - rg = rg + [ - 'SM': samplename, - 'LB': meta.library ?: "", - 'PL': meta.platform ?: rg.PL, - 'ID': meta.readgroup ?: rg.ID, - ] + def rg = getReadgroupFromFastq(fastq[0], samplename, meta.library, meta.platform) def meta_with_readgroup = meta + ['single_end': single_end, 'readgroup': rg] return [meta_with_readgroup, fastq] } @@ -363,67 +378,50 @@ workflow PREPROCESSING { sort: true, newLine: true, ) - .map { file -> [[id: 'main'], file] } .set { ch_collated_versions } // // MODULE: MultiQC // - ch_multiqc_config = channel.fromPath("${projectDir}/assets/multiqc_config.yml", checkIfExists: true) - ch_multiqc_custom_config = params.multiqc_config ? channel.fromPath(params.multiqc_config, checkIfExists: true) : channel.empty() - ch_multiqc_logo = params.multiqc_logo ? channel.fromPath(params.multiqc_logo, checkIfExists: true) : channel.empty() - + // summary files without meta, e.g. versions, params summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml').map { file -> [[id: 'main'], file] }) + ch_methods_description = channel.value(multiqc_methods_description ? methodsDescriptionText(multiqc_methods_description) : "") - ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("${projectDir}/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description)) + ch_summary_files = channel.empty() + .mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + .mix(ch_collated_versions) + .mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true)) + .toList() + .map { files -> [files] } + .dump(tag: "Summary files for MultiQC", pretty: true) - ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) - ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true).map { file -> [[id: 'main'], file] }) - - ch_multiqc_files = ch_multiqc_files + ch_multiqc_input = ch_multiqc_files .map { meta, files -> - return [meta.library ? [id: meta.library] : [id: 'main'], files] + def new_meta = meta.library ? [id: meta.library] : [id: 'multiqc'] + return [new_meta, files] } - .branch { meta, files -> - main: meta.id == 'main' - return files - library: meta.id != 'main' - return [meta, files instanceof List ? files : [files]] + .groupTuple(by: 0) + .combine(ch_summary_files) + .map { meta, multiqc_files, summary_files -> + return [meta, (multiqc_files + summary_files).flatten(), multiqc_config.flatten(), multiqc_logo, [], []] } + .dump(tag: "MULTIQC files", pretty: true) - - ch_library_multiqc_files = ch_multiqc_files.library.transpose(by: 1).groupTuple() - ch_library_multiqc_files.dump(tag: "MULTIQC files - library", pretty: true) - - - ch_main_multiqc_files = ch_multiqc_files.main.collect().map { files -> [[id: 'main'], files] } - ch_main_multiqc_files.dump(tag: "MULTIQC files - main", pretty: true) - MULTIQC_MAIN( - ch_main_multiqc_files, - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList(), - [], - [], - ) - - MULTIQC_LIBRARY( - ch_library_multiqc_files, - ch_multiqc_config.toList(), - ch_multiqc_custom_config.toList(), - ch_multiqc_logo.toList(), - [], - [], - ) + // MULTIQC([meta, multiqc_files, multiqc_config, multiqc_logo, replace_names, sample_names]) + MULTIQC(ch_multiqc_input) emit: - demultiplex_interop = BCLCONVERT.out.interop - demultiplex_reports = BCLCONVERT.out.reports - demultiplex_logs = BCLCONVERT.out.logs + demultiplex_reports = BCLCONVERT.out.reports.map { meta, reports -> + return [meta, files(reports.resolve("*"))] + } + demultiplex_logs = BCLCONVERT.out.logs.map { meta, logs -> + return [meta, files(logs.resolve("*"))] + } + demultiplex_interop = ch_illumina_flowcell.flowcell.map { meta, _samplesheet, flowcell -> + return [meta, files(flowcell.resolve("InterOp/*.bin"))] + } demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other falco_html = FALCO.out.html falco_txt = FALCO.out.txt @@ -456,56 +454,10 @@ workflow PREPROCESSING { picard_wgsmetrics = BAM_QC.out.picard_wgsmetrics picard_hsmetrics = BAM_QC.out.picard_hsmetrics md5sums = MD5SUM.out.checksum - multiqc_main_report = MULTIQC_MAIN.out.report.toList() - multiqc_main_data = MULTIQC_MAIN.out.data.toList() - multiqc_main_plots = MULTIQC_MAIN.out.plots.toList() - multiqc_library_report = MULTIQC_LIBRARY.out.report - multiqc_library_data = MULTIQC_LIBRARY.out.data - multiqc_library_plots = MULTIQC_LIBRARY.out.plots -} - -/* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - FUNCTIONS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ - -// https://github.com/nf-core/sarek/blob/7ba61bde8e4f3b1932118993c766ed33b5da465e/workflows/sarek.nf#L1014-L1040 -def readgroup_from_fastq(path) { - // expected format: - // xx:yy:FLOWCELLID:LANE:... (seven fields) - // or - // FLOWCELLID:LANE:xx:... (five fields) - def line - - path.withInputStream { fq -> - def gzipStream = new java.util.zip.GZIPInputStream(fq) as InputStream - def decoder = new InputStreamReader(gzipStream, 'ASCII') - def buffered = new BufferedReader(decoder) - line = buffered.readLine() - } - assert line.startsWith('@') - line = line.substring(1) - def fields = line.split(':') - def rg = [:] - rg.CN = "CMGG" - - if (fields.size() >= 7) { - // CASAVA 1.8+ format, from https://support.illumina.com/help/BaseSpace_OLH_009008/Content/Source/Informatics/BS/FileFormat_FASTQ-files_swBS.htm - // "@::::::: :::" - // def sequencer_serial = fields[0] - // def run_number = fields[1] - def fcid = fields[2] - def lane = fields[3] - def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : "" - - rg.ID = [index ?: fcid, lane].join(".") - rg.PU = [fcid, lane].join(".") - rg.PL = "ILLUMINA" - } - else if (fields.size() == 5) { - def fcid = fields[0] - rg.ID = fcid - } - return rg + multiqcsav_report = MULTIQCSAV.out.report.toList() + multiqcsav_data = MULTIQCSAV.out.data.toList() + multiqcsav_plots = MULTIQCSAV.out.plots.toList() + multiqc_report = MULTIQC.out.report + multiqc_data = MULTIQC.out.data + multiqc_plots = MULTIQC.out.plots } From 04252195bbaf2f1088c4e94664c279e8a57b869c Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 5 Mar 2026 14:39:11 +0100 Subject: [PATCH 14/24] restore InterOp output --- main.nf | 6 ++++-- workflows/preprocessing.nf | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/main.nf b/main.nf index e2f78c8b..b98a9eeb 100644 --- a/main.nf +++ b/main.nf @@ -70,7 +70,7 @@ workflow { demultiplex_reports = PREPROCESSING.out.demultiplex_reports.transpose() demultiplex_logs = PREPROCESSING.out.demultiplex_logs.transpose() demultiplex_fastq = PREPROCESSING.out.demultiplex_fastq.transpose() - demultiplex_interop = PREPROCESSING.out.demultiplex_interop.transpose() + demultiplex_interop = PREPROCESSING.out.demultiplex_interop.transpose(by: 1) falco_html = PREPROCESSING.out.falco_html falco_txt = PREPROCESSING.out.falco_txt fastp_json = PREPROCESSING.out.fastp_json @@ -122,7 +122,9 @@ output { } } demultiplex_interop { - path "InterOp/" + path { _meta, bin -> + bin >> "Interop/${bin.name}" + } } demultiplex_fastq { path { meta, fastq -> diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf index d654dfd5..5337ae93 100644 --- a/workflows/preprocessing.nf +++ b/workflows/preprocessing.nf @@ -419,9 +419,7 @@ workflow PREPROCESSING { demultiplex_logs = BCLCONVERT.out.logs.map { meta, logs -> return [meta, files(logs.resolve("*"))] } - demultiplex_interop = ch_illumina_flowcell.flowcell.map { meta, _samplesheet, flowcell -> - return [meta, files(flowcell.resolve("InterOp/*.bin"))] - } + demultiplex_interop = BCLCONVERT.out.interop demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other falco_html = FALCO.out.html falco_txt = FALCO.out.txt From ffacaf730e6ac982ea58b27aaa364c6180bff229 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 5 Mar 2026 19:50:18 +0100 Subject: [PATCH 15/24] Bump modules (#161) * bump modules * update subwf, include nf-teams * fix errors --- assets/adaptivecard.json | 67 ------------------- assets/slackreport.json | 34 ---------- main.nf | 1 - modules.json | 4 +- modules/nf-core/samtools/coverage/main.nf | 7 +- .../samtools/coverage/tests/main.nf.test.snap | 18 ++--- nextflow.config | 10 +++ .../main.nf | 5 -- .../nf-core/utils_nfcore_pipeline/main.nf | 64 ------------------ .../{main.workflow.nf.test => main.nf.test} | 0 ...orkflow.nf.test.snap => main.nf.test.snap} | 0 11 files changed, 22 insertions(+), 188 deletions(-) delete mode 100644 assets/adaptivecard.json delete mode 100644 assets/slackreport.json rename subworkflows/nf-core/utils_nfcore_pipeline/tests/{main.workflow.nf.test => main.nf.test} (100%) rename subworkflows/nf-core/utils_nfcore_pipeline/tests/{main.workflow.nf.test.snap => main.nf.test.snap} (100%) diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json deleted file mode 100644 index 92ed5f06..00000000 --- a/assets/adaptivecard.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "type": "message", - "attachments": [ - { - "contentType": "application/vnd.microsoft.card.adaptive", - "contentUrl": null, - "content": { - "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "msteams": { - "width": "Full" - }, - "type": "AdaptiveCard", - "version": "1.2", - "body": [ - { - "type": "TextBlock", - "size": "Large", - "weight": "Bolder", - "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", - "text": "nf-cmgg/preprocessing v${version} - ${runName}", - "wrap": true - }, - { - "type": "TextBlock", - "spacing": "None", - "text": "Completed at ${dateComplete} (duration: ${duration})", - "isSubtle": true, - "wrap": true - }, - { - "type": "TextBlock", - "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors. The full error message was: ${errorReport}.<% } %>", - "wrap": true - }, - { - "type": "TextBlock", - "text": "The command used to launch the workflow was as follows:", - "wrap": true - }, - { - "type": "TextBlock", - "text": "${commandLine}", - "isSubtle": true, - "wrap": true - } - ], - "actions": [ - { - "type": "Action.ShowCard", - "title": "Pipeline Configuration", - "card": { - "type": "AdaptiveCard", - "\$schema": "http://adaptivecards.io/schemas/adaptive-card.json", - "body": [ - { - "type": "FactSet", - "facts": [<% out << summary.collect{ k,v -> "{\"title\": \"$k\", \"value\" : \"$v\"}"}.join(",\n") %> - ] - } - ] - } - } - ] - } - } - ] -} diff --git a/assets/slackreport.json b/assets/slackreport.json deleted file mode 100644 index 84fc115a..00000000 --- a/assets/slackreport.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "attachments": [ - { - "fallback": "Plain-text summary of the attachment.", - "color": "<% if (success) { %>good<% } else { %>danger<%} %>", - "author_name": "nf-cmgg/preprocessing ${version} - ${runName}", - "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", - "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", - "fields": [ - { - "title": "Command used to launch the workflow", - "value": "```${commandLine}```", - "short": false - } - <% - if (!success) { %> - , - { - "title": "Full error message", - "value": "```${errorReport}```", - "short": false - }, - { - "title": "Pipeline configuration", - "value": "<% out << summary.collect{ k,v -> k == "hook_url" ? "_${k}_: (_hidden_)" : ( ( v.class.toString().contains('Path') || ( v.class.toString().contains('String') && v.contains('/') ) ) ? "_${k}_: `${v}`" : (v.class.toString().contains('DateTime') ? ("_${k}_: " + v.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM))) : "_${k}_: ${v}") ) }.join(",\n") %>", - "short": false - } - <% } - %> - ], - "footer": "Completed at <% out << dateComplete.format(java.time.format.DateTimeFormatter.ofLocalizedDateTime(java.time.format.FormatStyle.MEDIUM)) %> (duration: ${duration})" - } - ] -} diff --git a/main.nf b/main.nf index b98a9eeb..64e8d3db 100644 --- a/main.nf +++ b/main.nf @@ -62,7 +62,6 @@ workflow { params.plaintext_email, params.outdir, params.monochrome_logs, - params.hook_url, PREPROCESSING.out.multiqc_report, ) diff --git a/modules.json b/modules.json index 410a4a68..5f13e2ed 100644 --- a/modules.json +++ b/modules.json @@ -103,7 +103,7 @@ }, "samtools/coverage": { "branch": "master", - "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a", + "git_sha": "440edf75d8782913115a7b72a88392a227f72cc1", "installed_by": ["modules"], "patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff" }, @@ -170,7 +170,7 @@ }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1", + "git_sha": "f0b535b3ae20080f8db03dd5388876ad1ec29d70", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/samtools/coverage/main.nf b/modules/nf-core/samtools/coverage/main.nf index 25754d35..ff566999 100644 --- a/modules/nf-core/samtools/coverage/main.nf +++ b/modules/nf-core/samtools/coverage/main.nf @@ -37,11 +37,6 @@ process SAMTOOLS_COVERAGE { stub: def prefix = task.ext.prefix ?: "${meta.id}" """ - touch ${prefix}.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' ) - END_VERSIONS + echo "#rname\tstartpos\tendpos\tnumreads\tcovbases\tcoverage\tmeandepth\tmeanbaseq\tmeanmapq" > ${prefix}.txt """ } diff --git a/modules/nf-core/samtools/coverage/tests/main.nf.test.snap b/modules/nf-core/samtools/coverage/tests/main.nf.test.snap index 256c6507..0d72500a 100644 --- a/modules/nf-core/samtools/coverage/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/coverage/tests/main.nf.test.snap @@ -7,7 +7,7 @@ { "id": "test" }, - "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.txt:md5,ea885d54c0223dff86e2e44f5bc08374" ] ], "versions_samtools": [ @@ -19,11 +19,11 @@ ] } ], + "timestamp": "2026-03-03T16:16:25.616671578", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:27:27.16473081" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "test_samtools_coverage_bam": { "content": [ @@ -45,11 +45,11 @@ ] } ], + "timestamp": "2026-02-10T15:27:06.759689511", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:27:06.759689511" + } }, "test_samtools_coverage_cram": { "content": [ @@ -86,10 +86,10 @@ ] } ], + "timestamp": "2026-02-10T15:27:12.949845604", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:27:12.949845604" + } } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index c3e162e8..44d9698c 100644 --- a/nextflow.config +++ b/nextflow.config @@ -269,6 +269,7 @@ manifest { // Nextflow plugins plugins { id 'nf-schema@2.6.1' + id 'nf-teams@0.1.0' } validation { @@ -276,6 +277,15 @@ validation { monochromeLogs = params.monochrome_logs } +// TODO remove this once minimal nf-version is 26.0X with strict syntax. +teams { + enabled = true + webHook { + url = params.hook_url ? params.hook_url : System.getenv('TEAMS_WEBHOOK_URL') + } + onComplete.enabled = true +} + // Load modules.config for DSL2 module specific options includeConfig 'conf/modules.config' diff --git a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf index f269c502..d7b7103b 100644 --- a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf @@ -14,7 +14,6 @@ include { samplesheetToList } from 'plugin/nf-schema' include { paramsHelp } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' -include { imNotification } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NFCORE_PIPELINE } from '../../nf-core/utils_nfcore_pipeline' include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipeline' @@ -99,7 +98,6 @@ workflow PIPELINE_COMPLETION { plaintext_email // boolean: Send plain-text email instead of HTML outdir // path: Path to output directory where results will be published monochrome_logs // boolean: Disable ANSI colour codes in log output - hook_url // string: hook URL for notifications multiqc_report // string: Path to MultiQC report main: @@ -123,9 +121,6 @@ workflow PIPELINE_COMPLETION { } completionSummary(monochrome_logs) - if (hook_url) { - imNotification(summary_params, hook_url) - } } workflow.onError { diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index 2f30e9a4..bf568a08 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -353,67 +353,3 @@ def completionSummary(monochrome_logs=true) { log.info("-${colors.purple}[${workflow.manifest.name}]${colors.red} Pipeline completed with errors${colors.reset}-") } } - -// -// Construct and send a notification to a web server as JSON e.g. Microsoft Teams and Slack -// -def imNotification(summary_params, hook_url) { - def summary = [:] - summary_params - .keySet() - .sort() - .each { group -> - summary << summary_params[group] - } - - def misc_fields = [:] - misc_fields['start'] = workflow.start - misc_fields['complete'] = workflow.complete - misc_fields['scriptfile'] = workflow.scriptFile - misc_fields['scriptid'] = workflow.scriptId - if (workflow.repository) { - misc_fields['repository'] = workflow.repository - } - if (workflow.commitId) { - misc_fields['commitid'] = workflow.commitId - } - if (workflow.revision) { - misc_fields['revision'] = workflow.revision - } - misc_fields['nxf_version'] = workflow.nextflow.version - misc_fields['nxf_build'] = workflow.nextflow.build - misc_fields['nxf_timestamp'] = workflow.nextflow.timestamp - - def msg_fields = [:] - msg_fields['version'] = getWorkflowVersion() - msg_fields['runName'] = workflow.runName - msg_fields['success'] = workflow.success - msg_fields['dateComplete'] = workflow.complete - msg_fields['duration'] = workflow.duration - msg_fields['exitStatus'] = workflow.exitStatus - msg_fields['errorMessage'] = (workflow.errorMessage ?: 'None') - msg_fields['errorReport'] = (workflow.errorReport ?: 'None') - msg_fields['commandLine'] = workflow.commandLine.replaceFirst(/ +--hook_url +[^ ]+/, "") - msg_fields['projectDir'] = workflow.projectDir - msg_fields['summary'] = summary << misc_fields - - // Render the JSON template - def engine = new groovy.text.GStringTemplateEngine() - // Different JSON depending on the service provider - // Defaults to "Adaptive Cards" (https://adaptivecards.io), except Slack which has its own format - def json_path = hook_url.contains("hooks.slack.com") ? "slackreport.json" : "adaptivecard.json" - def hf = new File("${workflow.projectDir}/assets/${json_path}") - def json_template = engine.createTemplate(hf).make(msg_fields) - def json_message = json_template.toString() - - // POST - def post = new URL(hook_url).openConnection() - post.setRequestMethod("POST") - post.setDoOutput(true) - post.setRequestProperty("Content-Type", "application/json") - post.getOutputStream().write(json_message.getBytes("UTF-8")) - def postRC = post.getResponseCode() - if (!postRC.equals(200)) { - log.warn(post.getErrorStream().getText()) - } -} diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test similarity index 100% rename from subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test rename to subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap b/subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap similarity index 100% rename from subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap rename to subworkflows/nf-core/utils_nfcore_pipeline/tests/main.nf.test.snap From c763f0cf701be34f9f2f95ae9a50a7e0cf52d951 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Thu, 5 Mar 2026 21:00:11 +0100 Subject: [PATCH 16/24] Update/docs (#162) * fix download test * Update parameters docs * Update output docs * drop conda profiles * update usage docs --- .github/workflows/download_pipeline.yml | 4 +- docs/output.md | 11 ++-- docs/parameters.md | 69 ++++++++++++------------- docs/usage.md | 20 ++++--- nextflow.config | 20 ------- 5 files changed, 50 insertions(+), 74 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 6d94bcbf..d9970752 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -95,14 +95,14 @@ jobs: env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results + run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity,s3_ugent --outdir ./results - name: Run the downloaded pipeline (stub run not supported) id: run_pipeline if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity --outdir ./results + run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity,s3_ugent --outdir ./results - name: Count the downloaded number of container images id: count_afterwards diff --git a/docs/output.md b/docs/output.md index e57580fc..ed562aa8 100644 --- a/docs/output.md +++ b/docs/output.md @@ -10,7 +10,7 @@ The directories listed below will be created in the results directory after the ### Sample information -A separate directory will be created in the output directory for each sample containing all output files for that sample. +A separate directory will be created in the output directory for each sample containing all output files for that sample. If a library name is given in the samplesheet, the sample directories will be nested within a library directory.

Output files @@ -44,6 +44,7 @@ A separate directory will be created in the output directory for each sample con - `SAMPLE.regions.bed.gz`: The regional BED file, showing how well covered the requested regions are, calculated by `mosdepth` (only when a ROI BED file has been given) - `SAMPLE.regions.bed.gz.csi`: The index of the regional BED file - `SAMPLE.stats`: General statistics for the sample + - `multiqc/`: Directory containing the MultiQC report for the sample or library
### Extra outputs for flowcell inputs @@ -70,9 +71,9 @@ Some additional files will be created when a flowcell input has been used. -[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. +[MultiQC](https://seqera.io/multiqc/) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . ### Pipeline information @@ -80,10 +81,8 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ Output files - `pipeline_info/` - - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.dot`/`pipeline_dag.svg`. + - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.mmd`. - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. - - Reformatted samplesheet files used as input to the pipeline: `samplesheet.valid.csv`. - - Parameters used by the pipeline run: `params.json`. diff --git a/docs/parameters.md b/docs/parameters.md index 18c594f1..700a2292 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -12,51 +12,50 @@ Define where the pipeline should find input data and save output data. | `outdir` | The output directory where the results will be saved. You have to use absolute paths to storage on Cloud infrastructure. | `string` | | True | | | `email` | Email address for completion summary.
HelpSet this parameter to your e-mail address to get a summary e-mail with details of the run sent to you when the workflow exits. If set in your user config file (`~/.nextflow/config`) then you don't need to specify this on the command line for every run.
| `` | | | | | `multiqc_title` | MultiQC report title. Printed as page header, used for filename if not otherwise specified. | `string` | | | | +| `genomes` | | `object` | | | True | ## Pipeline options -| Parameter | Description | Type | Default | Required | Hidden | -| ------------------------ | ----------------------------------------------------------------------- | --------- | ----------- | -------- | ------ | -| `markdup` | Which alignment postprocessor to use | `string` | bamsormadup | | | -| `run_coverage` | Run coverage analysis steps | `boolean` | True | | | -| `skip_trimming` | Skip adapter trimming | `boolean` | False | | | -| `split_fastq` | Number of reads per FastQ split (0 to disable splitting) | `integer` | 100000000 | | | -| `trim_front` | Number of bases to trim from the front of the read | `integer` | 0 | | | -| `trim_tail` | Number of bases to trim from the tail of the read | `integer` | 0 | | | -| `adapter_R1` | Adapter sequence to be trimmed | `string` | None | | | -| `adapter_R2` | Adapter sequence to be trimmed | `string` | None | | | -| `disable_picard_metrics` | Disable the calculation of (slow) Picard metrics | `boolean` | False | | | -| `roi` | Region of interest for coverage analysis to be applied to all samples | `string` | None | | | -| `genelists` | Directory containing gene list bed files for granular coverage analysis | `string` | None | | | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | --------- | -------- | ------ | +| `split_fastq` | Specify how many reads each split of a FastQ file contains. Set 0 to turn off splitting at all.
HelpUse the the tool FastP to split FASTQ file by number of reads. This parallelizes across fastq file shards speeding up mapping. Note although the minimum value is 250 reads, if you have fewer than 250 reads a single FASTQ shard will still be created.
| `integer` | 100000000 | | | +| `genelists` | Directory containing gene list bed files for granular coverage analysis | `string` | None | | | ## Institutional config options Parameters used to describe centralised config profiles. These should not be edited. -| Parameter | Description | Type | Default | Required | Hidden | -| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------- | -------- | ------ | -| `custom_config_version` | Git commit id for Institutional configs. | `string` | master | | True | -| `custom_config_base` | Base directory for Institutional configs.
HelpIf you're running offline, Nextflow will not be able to fetch the institutional config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.
| `string` | https://raw.githubusercontent.com/nf-core/configs/master | | True | -| `config_profile_name` | Institutional config name. | `string` | | | True | -| `config_profile_description` | Institutional config description. | `string` | | | True | -| `config_profile_contact` | Institutional config contact information. | `string` | | | True | -| `config_profile_url` | Institutional config URL link. | `string` | | | True | +| Parameter | Description | Type | Default | Required | Hidden | +| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------ | -------- | ------ | +| `custom_config_version` | Git commit id for Institutional configs. | `string` | main | | True | +| `custom_config_base` | Base directory for custom configs.
HelpIf you're running offline, Nextflow will not be able to fetch the custom config files from the internet. If you don't need them, then this is not a problem. If you do need them, you should download the files from the repo and tell Nextflow where to find them with this parameter.
| `string` | https://raw.githubusercontent.com/nf-cmgg/configs/main | | True | +| `config_profile_name` | Institutional config name. | `string` | | | True | +| `config_profile_description` | Institutional config description. | `string` | | | True | +| `config_profile_contact` | Institutional config contact information. | `string` | | | True | +| `config_profile_url` | Institutional config URL link. | `string` | | | True | ## Generic options Less common options for the pipeline, typically set in a config file. -| Parameter | Description | Type | Default | Required | Hidden | -| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | ------- | -------- | ------ | -| `help` | Display help text. | `boolean` | | | True | -| `version` | Display version and exit. | `boolean` | | | True | -| `publish_dir_mode` | Method used to save pipeline results to output directory.
HelpThe Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.
| `string` | copy | | True | -| `email_on_fail` | Email address for completion summary, only when pipeline fails.
HelpAn email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.
| `string` | | | True | -| `plaintext_email` | Send plain-text email instead of HTML. | `boolean` | | | True | -| `max_multiqc_email_size` | File size limit when attaching MultiQC reports to summary emails. | `string` | 25.MB | | True | -| `monochrome_logs` | Do not use coloured log outputs. | `boolean` | | | True | -| `hook_url` | Incoming hook URL for messaging service
HelpIncoming hook URL for messaging service. Currently, MS Teams and Slack are supported.
| `string` | | | True | -| `multiqc_config` | Custom config file to supply to MultiQC. | `string` | | | True | -| `multiqc_logo` | Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file | `string` | | | True | -| `multiqc_methods_description` | Custom MultiQC yaml file containing HTML including a methods description. | `string` | | | | -| `validate_params` | Boolean whether to validate parameters against the schema at runtime | `boolean` | True | | True | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | -------------------------------------------------------- | -------- | ------ | +| `version` | Display version and exit. | `boolean` | | | True | +| `publish_dir_mode` | Method used to save pipeline results to output directory. (accepted: `symlink`\|`rellink`\|`link`\|`copy`\|`copyNoFollow`\|`move`)
HelpThe Nextflow `publishDir` option specifies which intermediate files should be saved to the output directory. This option tells the pipeline what method should be used to move these files. See [Nextflow docs](https://www.nextflow.io/docs/latest/process.html#publishdir) for details.
| `string` | copy | | True | +| `email_on_fail` | Email address for completion summary, only when pipeline fails.
HelpAn email address to send a summary email to when the pipeline is completed - ONLY sent if the pipeline does not exit successfully.
| `string` | | | True | +| `plaintext_email` | Send plain-text email instead of HTML. | `boolean` | | | True | +| `max_multiqc_email_size` | File size limit when attaching MultiQC reports to summary emails. | `string` | 25.MB | | True | +| `monochrome_logs` | Do not use coloured log outputs. | `boolean` | | | True | +| `hook_url` | Incoming hook URL for messaging service
HelpIncoming hook URL for messaging service. Currently, MS Teams and Slack are supported.
| `string` | | | True | +| `multiqc_config` | Custom config file to supply to MultiQC. | `string` | | | True | +| `multiqc_logo` | Custom logo file to supply to MultiQC. File name must also be set in the MultiQC config file | `string` | | | True | +| `multiqc_methods_description` | Custom MultiQC yaml file containing HTML including a methods description. | `string` | | | | +| `validate_params` | Boolean whether to validate parameters against the schema at runtime | `boolean` | True | | True | +| `pipelines_testdata_base_path` | Base URL or local path to location of pipeline test dataset files | `string` | https://raw.githubusercontent.com/nf-core/test-datasets/ | | True | +| `trace_report_suffix` | Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss. | `string` | | | True | +| `help` | Display the help message. | `['boolean', 'string']` | | | | +| `help_full` | Display the full detailed help message. | `boolean` | | | | +| `show_hidden` | Display hidden parameters in the help message (only works when --help or --help_full are provided). | `boolean` | | | | +| `igenomes_base` | Directory / URL base for iGenomes references. | `string` | /references/ | | True | +| `igenomes_ignore` | Do not load the iGenomes reference config.
HelpDo not load `igenomes.config` when running the pipeline. You may choose this option if you observe clashes between custom parameters and those supplied in `igenomes.config`.
| `boolean` | | | True | +| `genome` | Name of iGenomes reference.
HelpIf using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`.

See the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details.
| `string` | | | | diff --git a/docs/usage.md b/docs/usage.md index 32028ecd..c44bccca 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -116,7 +116,7 @@ CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz The typical command for running the pipeline is as follows: ```bash -nextflow run nf-cmgg/preprocessing --input ./samplesheet.csv --outdir ./results -profile docker +nextflow run nf-cmgg/preprocessing --input ./samplesheet. --outdir ./results -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -195,6 +195,12 @@ They are loaded in sequence, so later profiles can overwrite earlier profiles. If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +- `debug` + - A generic profile with settings to help with debugging the pipeline. It will use more verbose logging. +- `arm64` + - A generic profile with settings to run the pipeline on ARM64 architecture machines (eg. Apple Silicon). It will use software containers built for ARM64 where available. +- `emulate_amd64` + - A generic profile with settings to run the pipeline on ARM64 architecture machines (eg. Apple Silicon) using AMD64 software containers. This is for when ARM64 containers are not available but you still want to run the pipeline on an ARM64 machine. Note that this will be slower than using ARM64 containers. - `test` - A profile with a complete configuration for automated testing - Includes links to test data so needs no other parameters @@ -241,22 +247,14 @@ A pipeline might not always support every possible argument or option of a parti To learn how to provide additional arguments to a particular tool of the pipeline, please see the [customising tool arguments](https://nf-co.re/docs/usage/configuration#customising-tool-arguments) section of the nf-core website. -### nf-core/configs +### nf-core/configs and nf-cmgg/configs -In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-core pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. +In most cases, you will only need to create a custom config as a one-off but if you and others within your organisation are likely to be running nf-cmgg pipelines regularly and need to use the same settings regularly it may be a good idea to request that your custom config file is uploaded to the `nf-core/configs` git repository. Before you do this please can you test that the config file works with your pipeline of choice using the `-c` parameter. You can then create a pull request to the `nf-core/configs` repository with the addition of your config file, associated documentation file (see examples in [`nf-core/configs/docs`](https://github.com/nf-core/configs/tree/master/docs)), and amending [`nfcore_custom.config`](https://github.com/nf-core/configs/blob/master/nfcore_custom.config) to include your custom profile. See the main [Nextflow documentation](https://www.nextflow.io/docs/latest/config.html) for more information about creating your own configuration files. If you have any questions or issues please send us a message on [Slack](https://nf-co.re/join/slack) on the [`#configs` channel](https://nfcore.slack.com/channels/configs). -## Azure Resource Requests - -To be used with the `azurebatch` profile by specifying the `-profile azurebatch`. -We recommend providing a compute `params.vm_type` of `Standard_D16_v3` VMs by default but these options can be changed if required. - -Note that the choice of VM size depends on your quota and the overall workload during the analysis. -For a thorough list, please refer the [Azure Sizes for virtual machines in Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/sizes). - ## Running in the background Nextflow handles job submissions and supervises the running jobs. The Nextflow process must run until the pipeline is finished. diff --git a/nextflow.config b/nextflow.config index 44d9698c..990ff21a 100644 --- a/nextflow.config +++ b/nextflow.config @@ -69,26 +69,6 @@ profiles { cleanup = false nextflow.enable.configProcessNamesValidation = true } - conda { - conda.enabled = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - conda.channels = ['conda-forge', 'bioconda'] - apptainer.enabled = false - } - mamba { - conda.enabled = true - conda.useMamba = true - docker.enabled = false - singularity.enabled = false - podman.enabled = false - shifter.enabled = false - charliecloud.enabled = false - apptainer.enabled = false - } docker { docker.enabled = true conda.enabled = false From 085ae8eaae20bacb33693107a13ef2da2c77fcc0 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 09:52:37 +0100 Subject: [PATCH 17/24] rework metro map --- docs/workflow-dark.mmd | 175 +++++++++++------------------------------ 1 file changed, 45 insertions(+), 130 deletions(-) diff --git a/docs/workflow-dark.mmd b/docs/workflow-dark.mmd index 5005df0b..4c4458e3 100644 --- a/docs/workflow-dark.mmd +++ b/docs/workflow-dark.mmd @@ -1,143 +1,58 @@ %%metro title: nf-cmgg/preprocessing -%%metro logo: images/nf-cmgg-preprocessing_logo_dark.png -%%metro style: dark - -%%metro line: main | Main | #4CAF50 -%%metro line: align_rna | RNA Alignment | #FF9800 -%%metro line: align_dna | DNA Alignment | #ff1e00ff -%%metro line: align_postprocessing | Alignment Postprocessing | #9C27B0 -%%metro line: qc | Quality Control | #2196F3 - -%%metro file: fastq_in | FASTQ -%%metro file: bcl_in | BCL -%%metro file: cram_out | CRAM -%%metro file: fastq_out | FASTQ -%%metro file: reports_out | HTML - -graph LR - %% define nodes - bcl_in[] - fastq_in[] - fastq_out[] - cram_out[] - reports_out[] - - subgraph demultiplexing - %%metro exit: right | main - %%metro exit: bottom | qc - bcl_in[BCL] - bclconvert[bcl-convert] - bcl_in -->|main| bclconvert +%%metro style: nf-core +%%metro line: demux | Demultiplexing | #0000ff +%%metro line: alignment | Alignment and Postprocessing | #00ff00 +%%metro line: qc | Quality control | #ff0000 +%%metro file: BCL_IN | BCL +%%metro file: FASTQ_IN | FASTQ +%%metro line_order: span +%%metro compact_offsets: true + +graph TD + BCL_IN[] + FASTQ_IN[] + MULTIQC_LIBRARY + MULTIQC_SAV + + subgraph Demultiplexing + BCL_IN -->|demux| BCLCONVERT + BCL_IN -->|qc| MULTIQC_SAV + BCLCONVERT -->|qc| MULTIQC_SAV end - subgraph fastq_qc - fastp[fastp] - falco[falco] - bclconvert -->|main| fastp - bclconvert -->|main| fastq_out - bclconvert -->|qc| falco - fastq_in -->|main| fastp + subgraph FASTQ_QC + FASTQ_IN -->|qc| FALCO + FASTQ_IN -->|qc| FASTP + BCLCONVERT -->|qc| FALCO + BCLCONVERT -->|qc| FASTP + FALCO -->|qc| MULTIQC_LIBRARY + FASTP -->|qc| MULTIQC_LIBRARY end - subgraph alignment_dna - bwamem[BWA-MEM] - bwamem2[BWA-MEM2] - dragmap[Dragmap] - snapaligner[SNAP] - strobealign[StrobeAlign] - _dna_bam_out[] + _CRAM - fastp -->|align_dna| bwamem - fastp -->|align_dna| bwamem2 - fastp -->|align_dna| dragmap - fastp -->|align_dna| snapaligner - fastp -->|align_dna| strobealign - end + subgraph Alignment_and_Postprocessing + FASTQ_IN -->|alignment| ALIGN + BCLCONVERT -->|alignment| ALIGN - subgraph alignment_rna - star[STAR] - _rna_bam_out[] - - fastp -->|align_rna| star + ALIGN -->|alignment| MARKDUP + MARKDUP -->|alignment| _CRAM end - subgraph alignment_postprocessing - _postprocess_bam_in[] - bamsormadup[bamsormadup] - samtools_sort[samtools sort] - samtools_sormadup[samtools sormadup] - samtools_convert[samtools convert] - - bwamem -->|align_postprocessing| _postprocess_bam_in - bwamem2 -->|align_postprocessing| _postprocess_bam_in - dragmap -->|align_postprocessing| _postprocess_bam_in - snapaligner -->|align_postprocessing| _postprocess_bam_in - strobealign -->|align_postprocessing| _postprocess_bam_in - star -->|align_postprocessing| _postprocess_bam_in - - _postprocess_bam_in -->|align_postprocessing| bamsormadup - _postprocess_bam_in -->|align_postprocessing| samtools_sort - _postprocess_bam_in -->|align_postprocessing| samtools_sormadup - _postprocess_bam_in -->|align_postprocessing| samtools_convert - - bamsormadup -->|align_postprocessing| samtools_convert + _QC_COLLECT - samtools_convert -->|align_postprocessing| cram_out - samtools_sort -->|align_postprocessing| cram_out - samtools_sormadup -->|align_postprocessing| cram_out + subgraph COVERAGE_QC + _CRAM -->|qc| MOSDEPTH + _CRAM -->|qc| SAMTOOLS_COV + MOSDEPTH -->|qc| _QC_COLLECT + SAMTOOLS_COV -->|qc| _QC_COLLECT end - subgraph alignment_qc - %%metro direction: TB - samtools_flagstat[samtools flagstat] - samtools_stats[samtools stats] - samtools_idxstats[samtools idxstats] - picard_collectmultiplemetrics[picard collectmultiplemetrics] - - cram_out -->|qc| samtools_flagstat - cram_out -->|qc| samtools_stats - cram_out -->|qc| samtools_idxstats - cram_out -->|qc| picard_collectmultiplemetrics - end - - subgraph alignment_qc_wgs - picard_collectwgsmetrics[picard collectwgsmetrics] - cram_out -->|qc| picard_collectwgsmetrics - end - - subgraph alignment_qc_targetted - picard_collecthsmetrics[picard collecthsmetrics] - cram_out -->|qc| picard_collecthsmetrics - end - - subgraph coverage_qc - mosdepth[mosdepth] - samtools_coverage[samtools coverage] - panelcoverage[panelcoverage] - - cram_out -->|qc| mosdepth - cram_out -->|qc| samtools_coverage - cram_out -->|qc| panelcoverage - end - - subgraph reporting - mqc_sav[MultiQC-SAV] - mqc_library[Library MultiQC] - reports_out[QC Reports] - - bclconvert -->|qc| mqc_sav - fastp -->|qc| mqc_library - falco -->|qc| mqc_library - samtools_flagstat -->|qc| mqc_library - samtools_stats -->|qc| mqc_library - samtools_idxstats -->|qc| mqc_library - picard_collectmultiplemetrics -->|qc| mqc_library - picard_collectwgsmetrics -->|qc| mqc_library - picard_collecthsmetrics -->|qc| mqc_library - mosdepth -->|qc| mqc_library - samtools_coverage -->|qc| mqc_library - panelcoverage -->|qc| mqc_library - - mqc_sav -->|qc| reports_out - mqc_library -->|qc| reports_out + subgraph BAM_QC + _CRAM -->|qc| SAMTOOLS_QC + _CRAM -->|qc| PICARD + SAMTOOLS_QC -->|qc| _QC_COLLECT + PICARD -->|qc| _QC_COLLECT end + + _QC_COLLECT -->|qc| MULTIQC_LIBRARY From bf9a2ebc388dbb17e84c8c7a43980d947f25233b Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 09:54:51 +0100 Subject: [PATCH 18/24] add plugins untill NF 26.XX is in prod --- nextflow.config | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nextflow.config b/nextflow.config index 990ff21a..61685c2d 100644 --- a/nextflow.config +++ b/nextflow.config @@ -248,6 +248,8 @@ manifest { // Nextflow plugins plugins { + id 'nf-cgroup-metrics@1.0.1' + id 'nf-cmgg@0.1.0' id 'nf-schema@2.6.1' id 'nf-teams@0.1.0' } @@ -258,6 +260,10 @@ validation { } // TODO remove this once minimal nf-version is 26.0X with strict syntax. +cmgg { + samplesheets.enabled = true + done.enabled = true +} teams { enabled = true webHook { From c942c635cee396b1cd57a6b5fdeac375765e8662 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:07:34 +0100 Subject: [PATCH 19/24] Remove download_pipeline workflow file --- .github/workflows/download_pipeline.yml | 134 ------------------------ 1 file changed, 134 deletions(-) delete mode 100644 .github/workflows/download_pipeline.yml diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml deleted file mode 100644 index d9970752..00000000 --- a/.github/workflows/download_pipeline.yml +++ /dev/null @@ -1,134 +0,0 @@ -name: Test successful pipeline download with 'nf-core pipelines download' - -# Run the workflow when: -# - dispatched manually -# - when a PR is opened or reopened to main/master branch -# - the head branch of the pull request is updated, i.e. if fixes for a release are pushed last minute to dev. -on: - workflow_dispatch: - inputs: - testbranch: - description: "The specific branch you wish to utilize for the test execution of nf-core pipelines download." - required: true - default: "dev" - pull_request: - branches: - - main - - master - -env: - NXF_ANSI_LOG: false - -jobs: - configure: - runs-on: ubuntu-latest - outputs: - REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} - REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} - REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} - steps: - - name: Get the repository name and current branch - id: get_repo_properties - run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" - - download: - runs-on: ubuntu-latest - needs: configure - steps: - - name: Install Nextflow - uses: nf-core/setup-nextflow@v2 - - - name: Disk space cleanup - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 - with: - python-version: "3.14" - architecture: "x64" - - - name: Setup Apptainer - uses: eWaterCycle/setup-apptainer@4bb22c52d4f63406c49e94c804632975787312b3 # v2.0.0 - with: - apptainer-version: 1.3.4 - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install git+https://github.com/nf-core/tools.git - - - name: Make a cache directory for the container images - run: | - mkdir -p ./singularity_container_images - - - name: Download the pipeline - env: - NXF_SINGULARITY_CACHEDIR: ./singularity_container_images - run: | - nf-core pipelines download ${{ needs.configure.outputs.REPO_LOWERCASE }} \ - --revision ${{ needs.configure.outputs.REPO_BRANCH }} \ - --outdir ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} \ - --compress "none" \ - --container-system 'singularity' \ - --container-library "quay.io" -l "docker.io" -l "community.wave.seqera.io/library/" \ - --container-cache-utilisation 'amend' \ - --download-configuration 'yes' - - - name: Inspect download - run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} - - - name: Inspect container images - run: tree ./singularity_container_images | tee ./container_initial - - - name: Count the downloaded number of container images - id: count_initial - run: | - image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) - echo "Initial container image count: $image_count" - echo "IMAGE_COUNT_INITIAL=$image_count" >> "$GITHUB_OUTPUT" - - - name: Run the downloaded pipeline (stub) - id: stub_run_pipeline - continue-on-error: true - env: - NXF_SINGULARITY_CACHEDIR: ./singularity_container_images - NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -stub -profile test,singularity,s3_ugent --outdir ./results - - name: Run the downloaded pipeline (stub run not supported) - id: run_pipeline - if: ${{ steps.stub_run_pipeline.outcome == 'failure' }} - env: - NXF_SINGULARITY_CACHEDIR: ./singularity_container_images - NXF_SINGULARITY_HOME_MOUNT: true - run: nextflow run ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ needs.configure.outputs.REPO_BRANCH }}) -profile test,singularity,s3_ugent --outdir ./results - - - name: Count the downloaded number of container images - id: count_afterwards - run: | - image_count=$(ls -1 ./singularity_container_images | wc -l | xargs) - echo "Post-pipeline run container image count: $image_count" - echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - - - name: Compare container image counts - id: count_comparison - run: | - if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then - initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} - final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} - difference=$((final_count - initial_count)) - echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" - tree ./singularity_container_images > ./container_afterwards - diff ./container_initial ./container_afterwards - exit 1 - else - echo "The pipeline can be downloaded successfully!" - fi - - - name: Upload Nextflow logfile for debugging purposes - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 - with: - name: nextflow_logfile.txt - path: .nextflow.log* - include-hidden-files: true From c2c97712a33f83089d3958959ea9ab3cd80bbf9a Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:38:52 +0100 Subject: [PATCH 20/24] Update usage --- assets/schema_input.json | 4 +- docs/usage.md | 133 ++++++++++++++++++++------------------- 2 files changed, 70 insertions(+), 67 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index a6cd4941..4a7bd527 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -160,10 +160,10 @@ }, "anyOf": [ { - "required": ["id", "samplename", "organism", "aligner", "tag", "fastq_1", "fastq_2"] + "required": ["id", "samplename", "organism", "aligner", "fastq_1", "fastq_2"] }, { - "required": ["id", "samplename", "genome", "aligner", "tag", "fastq_1", "fastq_2"] + "required": ["id", "samplename", "genome", "aligner", "fastq_1", "fastq_2"] }, { "required": ["id", "samplesheet", "sample_info", "flowcell"] diff --git a/docs/usage.md b/docs/usage.md index c44bccca..3e64d578 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -14,42 +14,56 @@ You will need to create a samplesheet with information about the samples you wou The pipeline supports two types of samplesheets to be used as input: [`fastq`](#fastq-samplesheet) and [`flowcell`](#flowcell-samplesheet) samplesheets. The type will be automatically detected and applied by the pipeline. The pipeline will also auto-detect whether a sample is single- or paired-end using the information provided in the samplesheet. The samplesheet can have as many columns as you desire. -### Common samplesheet fields - -This table shows all samplesheet fields that can be used by both the [`fastq`](#fastq-samplesheet) and the [`flowcell`](#flowcell-samplesheet) samplesheet types. - -| Column | Description | Required for Fastq | Required for Flowcell | -| ------ | ---------------------------------------------------------------------------------- | ------------------ | --------------------- | -| `id` | Unique samplesheet/flowcell ID. Can only contain letters, numbers and underscores. | :heavy_check_mark: | :heavy_check_mark: | - ### Fastq samplesheet -A `fastq` samplesheet file consisting of both single- and paired-end data may look something like the one below. This is for 6 samples, where `TREATMENT_REP3` has been sequenced twice. - -```csv title="samplesheet.csv" -id,samplename,fastq_1,fastq_2,genome,tag -CONTROL_REP1,CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz,GRCh38,WES -CONTROL_REP2,CONTROL_REP2,AEG588A2_S2_L002_R1_001.fastq.gz,AEG588A2_S2_L002_R2_001.fastq.gz,GRCh38,WES -CONTROL_REP3,CONTROL_REP3,AEG588A3_S3_L002_R1_001.fastq.gz,AEG588A3_S3_L002_R2_001.fastq.gz,GRCh38,WES -TREATMENT_REP1,TREATMENT_REP1,AEG588A4_S4_L003_R1_001.fastq.gz,,GRCh38,WES -TREATMENT_REP2,TREATMENT_REP2,AEG588A5_S5_L003_R1_001.fastq.gz,,GRCh38,WES -TREATMENT_REP3,TREATMENT_REP3,AEG588A6_S6_L003_R1_001.fastq.gz,,GRCh38,WES -TREATMENT_REP3,TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,GRCh38,WES +A `fastq` samplesheet file consisting of paired-end data may look something like the one below. + +```yml +- id: DNA1_L001 + samplename: DNA_paired1 + library: test_library + genome: GRCh38 + aligner: bwamem + markdup: bamsormadup + umi_aware: false + skip_trimming: false + trim_front: 0 + trim_tail: 0 + adapter_R1: AGATCGGAAGAGCACACGTCTGAACTCCTTA + adapter_R2: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT + run_coverage: true + disable_picard_metrics: false + roi: null + tag: WES + sample_type: DNA + fastq_1: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz + fastq_2: https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R2.fastq.gz ``` Following table shows the fields that are used by the `fastq` samplesheet: -| Column | Description | Required | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | -| `fastq_1` | FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :heavy_check_mark: | -| `fastq_2` | FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :x: | -| `samplename` | The sample name corresponding to the sample in the Fastq file(s) | :heavy_check_mark: | -| `genome` | The genome build to use for the analysis. Currently supports GRCh38, GRCm39 and GRCz11 | :heavy_check_mark: (unless `organism` is given) | -| `organism` | Full name of the organism. Currently supports "Homo sapiens", "Mus musculus" and "Danio rerio" | :heavy_check_mark: (unless `genome` is given) | -| `library` | Sample library name | :x: | -| `tag` | The tag used by the sample. Can be one of WES, WGS or coPGT-M | :heavy_check_mark: | -| `roi` | The path to a BED file containing Regions Of Interest for coverage analysis | :x: | -| `aligner` | The aligner to use for this sample. Can be one of these: bowtie2, bwamem, bwamem2, dragmap, strobe and snap. set to `false` to output fastq. | :x: | +| Column | Description | Required | +| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | +| `id` | Unique sample identifier | :heavy_check_mark: | +| `samplename` | The sample name corresponding to the sample in the Fastq file(s) | :heavy_check_mark: | +| `genome` | The genome build to use for the analysis. Currently supports `GRCh38`, `GRCm39` and `GRCz11` | :heavy_check_mark: (unless `organism` is given) | +| `organism` | Full name of the organism. Currently supports `Homo sapiens`, `Mus musculus` and `Danio rerio` | :heavy_check_mark: (unless `genome` is given) | +| `library` | Sample library name | :x: | +| `tag` | The tag used by the sample. Can be one of `WES`, `WGS`, `SeqCap` and `coPGT-M` | :x: | +| `aligner` | The aligner to use for this sample. Can be one of these: `bowtie2`, `bwamem`, `bwamem2`, `dragmap`, `strobe` and `snap`. Set to `false` to output fastq. | :heavy_check_mark: | +| `markdup` | Markdup algorithm to use for duplicate marking. Can be set to `bamsormadup`, `samtools` or `false` | :x: | +| `umi_aware` | Whether UMI-aware processing should be used. Only applies when `markdup` is set to `samtools` | :x: | +| `skip_trimming` | Skip adapter trimming step | :x: | +| `trim_front` | Number of bases to trim from the front of reads | :x: | +| `trim_tail` | Number of bases to trim from the tail of reads | :x: | +| `adapter_R1` | Adapter sequence for read 1 | :x: | +| `adapter_R2` | Adapter sequence for read 2 | :x: | +| `run_coverage` | Run coverage analysis | :x: | +| `disable_picard_metrics` | Disable Picard metrics collection | :x: | +| `roi` | The path to a BED file containing Regions Of Interest for coverage analysis | :x: | +| `sample_type` | Sample type (e.g., `DNA`, `RNA`) | :x: | +| `fastq_1` | FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :heavy_check_mark: | +| `fastq_2` | FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :x: | An [example samplesheet](../tests/inputs/test.yml) has been provided with the pipeline. @@ -57,9 +71,12 @@ An [example samplesheet](../tests/inputs/test.yml) has been provided with the pi A `flowcell` samplesheet file consisting of one sequencing run may look something like the one below. -```csv title="samplesheet.csv" -id,samplesheet,sample_info,flowcell -RUN_NAME,RUN_NAME_samplesheet.csv,RUN_NAME_sampleinfo.csv,RUN_NAME_flowcell/ +```yml +- id: 200624_A00834_0183_BHMTFYDRXX + samplesheet: https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleSheet_2.csv + lane: 1 + flowcell: s3://test-data/genomics/homo_sapiens/illumina/bcl/ + sample_info: https://github.com/nf-cmgg/test-datasets/raw/refs/heads/preprocessing/data/genomics/homo_sapiens/illumina/flowcell/SampleInfo_2.json ``` Following table shows the fields that are used by the `flowcell` samplesheet: @@ -77,38 +94,24 @@ An [example samplesheet](../tests/inputs/test.yml) has been provided with the pi A `flowcell` sample info JSON/YML file consisting for one sequencing run may look something like the one below. -```json title="sample_info.json" -{ - "samplename": "Sample1", - "library": "test", - "organism": "Homo sapiens", - "tag": "WES" -} -``` - -Following table shows the fields that are used by the `flowcell` samplesheet: - -| Column | Description | Required | -| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `samplename` | The sample name | :heavy_check_mark: | -| `library` | The library name | :x: | -| `tag` | Sample tag. Has to be one of these: WES, WGS, coPGT-M | :heavy_check_mark: | -| `organism` | The organism of the sample. Has to be one of these: "Homo sapiens", "Mus musculus" or "Danio rerio" | :heavy_check_mark: | -| `vivar_project` | The vivar project name (currently not used by the pipeline) | :x: | -| `binsize` | The binsize for CNV analysis (currently not used by the pipeline) | :x: | -| `panels` | A list of panels for coverage analysis | :x: | -| `roi` | Region of interest BED file for coverage analysis | :x: | -| `aligner` | The aligner to use for this sample. Can be one of these: bowtie2, bwamem, bwamem2, dragmap, strobe and snap. Set to `false` to output fastq. | :x: | - -### Multiple runs of the same sample - -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: - -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz +```yml +- id: DNA1_L001 + samplename: DNA_paired1 + library: test_library + genome: GRCh38 + aligner: bwamem + markdup: bamsormadup + umi_aware: false + skip_trimming: false + trim_front: 0 + trim_tail: 0 + adapter_R1: AGATCGGAAGAGCACACGTCTGAACTCCTTA + adapter_R2: AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT + run_coverage: true + disable_picard_metrics: false + roi: null + tag: WES + sample_type: DNA ``` ## Running the pipeline From 60d9370a0279396b9d4e19977b2bbb748315e1bf Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:53:16 +0100 Subject: [PATCH 21/24] more docs --- README.md | 48 +- docs/images/metro_map.png | Bin 212847 -> 0 bytes docs/images/metro_map.svg | 1263 ----------------- .../metro_map_dark.mmd} | 0 .../metro_map_dark.svg} | 0 docs/images/metro_map_light.mmd | 58 + docs/images/metro_map_light.svg | 264 ++++ 7 files changed, 339 insertions(+), 1294 deletions(-) delete mode 100644 docs/images/metro_map.png delete mode 100644 docs/images/metro_map.svg rename docs/{workflow-dark.mmd => images/metro_map_dark.mmd} (100%) rename docs/{workflow-dark.svg => images/metro_map_dark.svg} (100%) create mode 100644 docs/images/metro_map_light.mmd create mode 100644 docs/images/metro_map_light.svg diff --git a/README.md b/README.md index 119479bf..408d1a51 100644 --- a/README.md +++ b/README.md @@ -20,15 +20,22 @@ The pipeline is built using Nextflow, a workflow tool to run tasks across multip Steps inlcude: -1. Demultiplexing using [`BCLconvert`](https://emea.support.illumina.com/sequencing/sequencing_software/bcl-convert.html) -2. Read QC and trimming using [`fastp`](https://github.com/OpenGene/fastp) -3. Alignment using either [`bwa`](https://github.com/lh3/bwa), [`bwa-mem2`](https://github.com/bwa-mem2/bwa-mem2), [`bowtie2`](https://github.com/BenLangmead/bowtie2), [`dragmap`](https://github.com/Illumina/DRAGMAP), [`snap`](https://github.com/amplab/snap) or [`strobe`](https://github.com/ksahlin/strobealign) for DNA-seq and [`STAR`](https://github.com/alexdobin/STAR) for RNA-seq -4. Duplicate marking using [`bamsormadup`](https://gitlab.com/german.tischler/biobambam2) or [`samtools markdup`](http://www.htslib.org/doc/samtools-markdup.html) -5. Coverage analysis using [`mosdepth`](https://github.com/brentp/mosdepth) and [`samtools coverage`](http://www.htslib.org/doc/samtools-coverage.html) -6. Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollecHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics) -7. QC aggregation using [`multiqc`](https://multiqc.info/) +- Demultiplexing using [`BCLconvert`](https://emea.support.illumina.com/sequencing/sequencing_software/bcl-convert.html) +- Run QC using [`MultiQC SAV`](https://github.com/MultiQC/MultiQC_SAV) +- Read QC and trimming using [`fastp`](https://github.com/OpenGene/fastp) or [`falco`](https://github.com/smithlabcode/falco) +- Alignment using either [`bwa`](https://github.com/lh3/bwa), [`bwa-mem2`](https://github.com/bwa-mem2/bwa-mem2), [`bowtie2`](https://github.com/BenLangmead/bowtie2), [`dragmap`](https://github.com/Illumina/DRAGMAP), [`snap`](https://github.com/amplab/snap) or [`strobe`](https://github.com/ksahlin/strobealign) for DNA-seq and [`STAR`](https://github.com/alexdobin/STAR) for RNA-seq +- Duplicate marking using [`bamsormadup`](https://gitlab.com/german.tischler/biobambam2) or [`samtools markdup`](http://www.htslib.org/doc/samtools-markdup.html) +- Coverage analysis using [`mosdepth`](https://github.com/brentp/mosdepth) and [`samtools coverage`](http://www.htslib.org/doc/samtools-coverage.html) +- Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollecHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics) +- QC aggregation using [`multiqc`](https://multiqc.info/) ![metro map](docs/images/metro_map.png) + + + + + Fallback image description + ## Usage @@ -37,36 +44,15 @@ Steps inlcude: The full documentation can be found [here](docs/README.md) -First, prepare a samplesheet with your input data that looks as follows: - -`samplesheet.csv` for fastq inputs: - -```csv -id,samplename,organism,library,aligner,fastq_1,fastq_2 -sample1,sample1,Homo sapiens,Library_Name,bwamem,reads1.fq.gz,reads2.fq.gz -``` - -`samplesheet.csv` for flowcell inputs: - -```csv -id,samplesheet,lane,flowcell,sample_info -flowcell_id,/path/to/illumina_samplesheet.csv,1,/path/to/sequencer_uploaddir,/path/to/sampleinfo.csv -``` - -`sampleinfo.csv` for use with flowcell inputs: - -```csv -samplename,library,organism,tag,aligner -fc_sample1,test,Homo sapiens,WES,bwamem -``` +First, prepare a samplesheet with your input data. Check the [usage docs](docs/usage.md) for details on the required format and example files. Now, you can run the pipeline using: ```bash nextflow run nf-cmgg/preprocessing \ - -profile \ + -profile \ --igenomes_base /path/to/genomes \ - --input samplesheet.csv \ + --input samplesheet. \ --outdir ``` diff --git a/docs/images/metro_map.png b/docs/images/metro_map.png deleted file mode 100644 index f2057abd01142a8e04fa59717a1e315d464c56fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212847 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≫Kd11KWU0&gh*IgwHF1 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%0Db!)2u6SLGW}HFX`RTjK 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 HE!? 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 B#s~la diff --git a/docs/images/metro_map.svg b/docs/images/metro_map.svg deleted file mode 100644 index cfd9b083..00000000 --- a/docs/images/metro_map.svg +++ /dev/null @@ -1,1263 +0,0 @@ - - - -nf-cmgg/preprocessingfastqflowcellfastqORfastqfastqbclbclbclbclbclFastP trimming,QC andadapterremovalAlignbowtie2, bwamem,bwamem2, snapdragmap or starcramMultiQCreportindexfastaORMandatory process(es)Supported genomes flowReport filesLegendsOptional process(es)Additional outputs/inputsUnsupported genomes flowCreate indexwhen index ismissing Sort & mark duplicatessamtools sormadup or bamsormadupsamtools convertbam -> crambedmosdepthsamtools importfastq -> ucramPicard metricspicard CollectMultipleMetrics,picard CollectWgsMetrics andpicard CollectHsMetrics--disable_picard_metrics falsesamtools metricssamtools stats,samtools flagstat andsamtools idxstatsucramreportsAll generatedreportssamtools catmerge ucramsfrom same samplebcl-convertbcl -> fastqinteropdetermine coveragein genelist panelssamtoolscoveragebed diff --git a/docs/workflow-dark.mmd b/docs/images/metro_map_dark.mmd similarity index 100% rename from docs/workflow-dark.mmd rename to docs/images/metro_map_dark.mmd diff --git a/docs/workflow-dark.svg b/docs/images/metro_map_dark.svg similarity index 100% rename from docs/workflow-dark.svg rename to docs/images/metro_map_dark.svg diff --git a/docs/images/metro_map_light.mmd b/docs/images/metro_map_light.mmd new file mode 100644 index 00000000..4c4458e3 --- /dev/null +++ b/docs/images/metro_map_light.mmd @@ -0,0 +1,58 @@ +%%metro title: nf-cmgg/preprocessing +%%metro style: nf-core +%%metro line: demux | Demultiplexing | #0000ff +%%metro line: alignment | Alignment and Postprocessing | #00ff00 +%%metro line: qc | Quality control | #ff0000 +%%metro file: BCL_IN | BCL +%%metro file: FASTQ_IN | FASTQ +%%metro line_order: span +%%metro compact_offsets: true + +graph TD + BCL_IN[] + FASTQ_IN[] + MULTIQC_LIBRARY + MULTIQC_SAV + + subgraph Demultiplexing + BCL_IN -->|demux| BCLCONVERT + BCL_IN -->|qc| MULTIQC_SAV + BCLCONVERT -->|qc| MULTIQC_SAV + end + + subgraph FASTQ_QC + FASTQ_IN -->|qc| FALCO + FASTQ_IN -->|qc| FASTP + BCLCONVERT -->|qc| FALCO + BCLCONVERT -->|qc| FASTP + FALCO -->|qc| MULTIQC_LIBRARY + FASTP -->|qc| MULTIQC_LIBRARY + end + + _CRAM + + subgraph Alignment_and_Postprocessing + FASTQ_IN -->|alignment| ALIGN + BCLCONVERT -->|alignment| ALIGN + + ALIGN -->|alignment| MARKDUP + MARKDUP -->|alignment| _CRAM + end + + _QC_COLLECT + + subgraph COVERAGE_QC + _CRAM -->|qc| MOSDEPTH + _CRAM -->|qc| SAMTOOLS_COV + MOSDEPTH -->|qc| _QC_COLLECT + SAMTOOLS_COV -->|qc| _QC_COLLECT + end + + subgraph BAM_QC + _CRAM -->|qc| SAMTOOLS_QC + _CRAM -->|qc| PICARD + SAMTOOLS_QC -->|qc| _QC_COLLECT + PICARD -->|qc| _QC_COLLECT + end + + _QC_COLLECT -->|qc| MULTIQC_LIBRARY diff --git a/docs/images/metro_map_light.svg b/docs/images/metro_map_light.svg new file mode 100644 index 00000000..621e5caa --- /dev/null +++ b/docs/images/metro_map_light.svg @@ -0,0 +1,264 @@ + + + + + + + +1 +demultiplexing + + +2 +fastq_qc + + +3 +alignment_dna + + +4 +alignment_rna + + +5 +alignment_postprocessing + + +6 +alignment_qc + + +7 +alignment_qc_wgs + + +8 +alignment_qc_targetted + + +9 +coverage_qc + + +10 +reporting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BCL + + + + + + + +FASTQ + + + + +FASTQ + + + + + + + + + + + + + + +CRAM + + + + + + + + + + + + + + + +HTML +BCL +fastq_in +MultiQC-SAV +Library MultiQC +falco +BWA-MEM +STAR +samtools flagstat +picard collectwgsmetrics +picard collecthsmetrics +mosdepth +fastq_out +BWA-MEM2 +samtools stats +samtools coverage +Dragmap +samtools idxstats +panelcoverage +SNAP +picard collectmultiplemetrics +StrobeAlign +bcl-convert +fastp +bamsormadup +samtools sort +QC Reports +samtools sormadup +samtools convert +cram_out + + + +Main + +RNA Alignment + +DNA Alignment + +Alignment Postprocessing + +Quality Control +created with nf-metro v0.4.4 + From 4a6fa7b777512626f38340bcd0ca129ec032eb85 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:07:19 +0100 Subject: [PATCH 22/24] lint and spell check markdown --- CHANGELOG.md | 2 +- README.md | 4 ++-- docs/output.md | 8 +++---- docs/parameters.md | 8 +++---- docs/usage.md | 57 ++++------------------------------------------ 5 files changed, 15 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c062310d..34cc5393 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,7 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## v2.0.2 -- Drop unsed params +- Drop unused params - Set aligner to `star` for RNA-seq - Finetune resources - Fix some bugs for different input tags diff --git a/README.md b/README.md index 408d1a51..83b6f5e5 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ It also performs basic QC and coverage analysis. The pipeline is built using Nextflow, a workflow tool to run tasks across multiple compute infrastructures in a very portable manner. It comes with docker containers making installation trivial and results highly reproducible. -Steps inlcude: +Steps include: - Demultiplexing using [`BCLconvert`](https://emea.support.illumina.com/sequencing/sequencing_software/bcl-convert.html) - Run QC using [`MultiQC SAV`](https://github.com/MultiQC/MultiQC_SAV) @@ -26,7 +26,7 @@ Steps inlcude: - Alignment using either [`bwa`](https://github.com/lh3/bwa), [`bwa-mem2`](https://github.com/bwa-mem2/bwa-mem2), [`bowtie2`](https://github.com/BenLangmead/bowtie2), [`dragmap`](https://github.com/Illumina/DRAGMAP), [`snap`](https://github.com/amplab/snap) or [`strobe`](https://github.com/ksahlin/strobealign) for DNA-seq and [`STAR`](https://github.com/alexdobin/STAR) for RNA-seq - Duplicate marking using [`bamsormadup`](https://gitlab.com/german.tischler/biobambam2) or [`samtools markdup`](http://www.htslib.org/doc/samtools-markdup.html) - Coverage analysis using [`mosdepth`](https://github.com/brentp/mosdepth) and [`samtools coverage`](http://www.htslib.org/doc/samtools-coverage.html) -- Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollecHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics) +- Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollectHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics) - QC aggregation using [`multiqc`](https://multiqc.info/) ![metro map](docs/images/metro_map.png) diff --git a/docs/output.md b/docs/output.md index ed562aa8..119dd95e 100644 --- a/docs/output.md +++ b/docs/output.md @@ -17,19 +17,19 @@ A separate directory will be created in the output directory for each sample con - `SAMPLE` - `SAMPLE.CollectHsMetrics.coverage_metrics`: The coverage metrics calculated by `picard CollectHsMetrics` - - `SAMPLE.CollectMultipleMetrics.alignment_summary_metrics`: The alignment summary metrics calculated by `picard CollectMultipleMEtrics` + - `SAMPLE.CollectMultipleMetrics.alignment_summary_metrics`: The alignment summary metrics calculated by `picard CollectMultipleMetrics` - `SAMPLE.CollectMultipleMetrics.base_distribution_by_cycle_metrics`: The base distribution by cycle metrics calculated by `picard CollectMultipleMetrics` - `SAMPLE.CollectMultipleMetrics.base_distribution_by_cycle.pdf`: PDF file containing the base distribution by cycle metrics - `SAMPLE.CollectMultipleMetrics.quality_by_cycle_metrics`: The quality by cycle metrics calculated by `picard CollectMultipleMetrics` - `SAMPLE.CollectMultipleMetrics.quality_by_cycle.pdf`: PDF file containing the quality by cycle metrics - `SAMPLE.CollectMultipleMetrics.quality_distribution_metrics`: The quality by distribution metrics calculated by `picard CollectMultipleMetrics` - `SAMPLE.CollectMultipleMetrics.quality_distribution.pdf`: PDF file containing the quality distribution metrics - - `SAMPLE.CollectMultipleMetrics.read_length_histogram.pdf`: A histogram detailing the read lenghts made with `picard CollectMultipleMetrics` + - `SAMPLE.CollectMultipleMetrics.read_length_histogram.pdf`: A histogram detailing the read lengths made with `picard CollectMultipleMetrics` - `SAMPLE.coverage.txt`: The coverage metrics calculated by `samtools coverage` - `SAMPLE.cram`: The CRAM file generated by the aligner - `SAMPLE.cram.crai`: The index of the CRAM file - `SAMPLE.cram.md5`: The md5sum of the CRAM file - - `SAMPLE.duplicate_metrics.txt`: The duplicate metrics calculated by `samtools mardup` + - `SAMPLE.duplicate_metrics.txt`: The duplicate metrics calculated by `samtools markdup` - `SAMPLE.fastp.html`: The HTML file visualising the metrics calculated by `fastp` - `SAMPLE.fastp.json`: The JSON file containing the metrics calculated by `fastp` - `SAMPLE.flagstat`: The quality control metrics calculated by `samtools flagstat` @@ -82,7 +82,7 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ - `pipeline_info/` - Reports generated by Nextflow: `execution_report.html`, `execution_timeline.html`, `execution_trace.txt` and `pipeline_dag.mmd`. - - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameter's are used when running the pipeline. + - Reports generated by the pipeline: `pipeline_report.html`, `pipeline_report.txt` and `software_versions.yml`. The `pipeline_report*` files will only be present if the `--email` / `--email_on_fail` parameters are used when running the pipeline. diff --git a/docs/parameters.md b/docs/parameters.md index 700a2292..0f7220fc 100644 --- a/docs/parameters.md +++ b/docs/parameters.md @@ -16,10 +16,10 @@ Define where the pipeline should find input data and save output data. ## Pipeline options -| Parameter | Description | Type | Default | Required | Hidden | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | --------- | -------- | ------ | -| `split_fastq` | Specify how many reads each split of a FastQ file contains. Set 0 to turn off splitting at all.
HelpUse the the tool FastP to split FASTQ file by number of reads. This parallelizes across fastq file shards speeding up mapping. Note although the minimum value is 250 reads, if you have fewer than 250 reads a single FASTQ shard will still be created.
| `integer` | 100000000 | | | -| `genelists` | Directory containing gene list bed files for granular coverage analysis | `string` | None | | | +| Parameter | Description | Type | Default | Required | Hidden | +| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | --------- | -------- | ------ | +| `split_fastq` | Specify how many reads each split of a FastQ file contains. Set 0 to turn off splitting at all.
HelpUse the tool FastP to split FASTQ file by number of reads. This parallelizes across fastq file shards speeding up mapping. Note although the minimum value is 250 reads, if you have fewer than 250 reads a single FASTQ shard will still be created.
| `integer` | 100000000 | | | +| `genelists` | Directory containing gene list bed files for granular coverage analysis | `string` | None | | | ## Institutional config options diff --git a/docs/usage.md b/docs/usage.md index 823d41e2..f59c809a 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -42,7 +42,6 @@ A `fastq` samplesheet file consisting of paired-end data may look something like Following table shows the fields that are used by the `fastq` samplesheet: -<<<<<<< feat/nf-metro | Column | Description | Required | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | | `id` | Unique sample identifier | :heavy_check_mark: | @@ -65,19 +64,6 @@ Following table shows the fields that are used by the `fastq` samplesheet: | `sample_type` | Sample type (e.g., `DNA`, `RNA`) | :x: | | `fastq_1` | FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :heavy_check_mark: | | `fastq_2` | FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :x: | -======= -| Column | Description | Required | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | -| `fastq_1` | FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :heavy_check_mark: | -| `fastq_2` | FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz' | :x: | -| `samplename` | The sample name corresponding to the sample in the Fastq file(s) | :heavy_check_mark: | -| `genome` | The genome build to use for the analysis. Currently supports GRCh38, GRCm39 and GRCz11 | :heavy_check_mark: (unless `organism` is given) | -| `organism` | Full name of the organism. Currently supports "Homo sapiens", "Mus musculus" and "Danio rerio" | :heavy_check_mark: (unless `genome` is given) | -| `library` | Sample library name | :x: | -| `tag` | The tag used by the sample. Can be one of WES, WGS or coPGT-M | :heavy_check_mark: | -| `roi` | The path to a BED file containing Regions Of Interest for coverage analysis | :x: | -| `aligner` | The aligner to use for this sample. Can be one of these: bowtie2, bwamem, bwamem2, dragmap, strobe and snap. set to `false` to output fastq. | :x: | ->>>>>>> dev An [example samplesheet](../tests/inputs/test.yml) has been provided with the pipeline. @@ -108,7 +94,6 @@ An [example samplesheet](../tests/inputs/test.yml) has been provided with the pi A `flowcell` sample info JSON/YML file consisting for one sequencing run may look something like the one below. -<<<<<<< feat/nf-metro ```yml - id: DNA1_L001 samplename: DNA_paired1 @@ -127,40 +112,6 @@ A `flowcell` sample info JSON/YML file consisting for one sequencing run may loo roi: null tag: WES sample_type: DNA -======= -```json title="sample_info.json" -{ - "samplename": "Sample1", - "library": "test", - "organism": "Homo sapiens", - "tag": "WES" -} -``` - -Following table shows the fields that are used by the `flowcell` samplesheet: - -| Column | Description | Required | -| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `samplename` | The sample name | :heavy_check_mark: | -| `library` | The library name | :x: | -| `tag` | Sample tag. Has to be one of these: WES, WGS, coPGT-M | :heavy_check_mark: | -| `organism` | The organism of the sample. Has to be one of these: "Homo sapiens", "Mus musculus" or "Danio rerio" | :heavy_check_mark: | -| `vivar_project` | The vivar project name (currently not used by the pipeline) | :x: | -| `binsize` | The binsize for CNV analysis (currently not used by the pipeline) | :x: | -| `panels` | A list of panels for coverage analysis | :x: | -| `roi` | Region of interest BED file for coverage analysis | :x: | -| `aligner` | The aligner to use for this sample. Can be one of these: bowtie2, bwamem, bwamem2, dragmap, strobe and snap. Set to `false` to output fastq. | :x: | - -### Multiple runs of the same sample - -The `sample` identifiers have to be the same when you have re-sequenced the same sample more than once e.g. to increase sequencing depth. The pipeline will concatenate the raw reads before performing any downstream analysis. Below is an example for the same sample sequenced across 3 lanes: - -```csv title="samplesheet.csv" -sample,fastq_1,fastq_2 -CONTROL_REP1,AEG588A1_S1_L002_R1_001.fastq.gz,AEG588A1_S1_L002_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L003_R1_001.fastq.gz,AEG588A1_S1_L003_R2_001.fastq.gz -CONTROL_REP1,AEG588A1_S1_L004_R1_001.fastq.gz,AEG588A1_S1_L004_R2_001.fastq.gz ->>>>>>> dev ``` ## Running the pipeline @@ -222,7 +173,7 @@ First, go to the [nf-cmgg/preprocessing releases page](https://github.com/nf-cmg This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. -To further assist in reproducbility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. +To further assist in reproducibility, you can use share and re-use [parameter files](#running-the-pipeline) to repeat pipeline runs with the same settings without having to write out a command with every single parameter. :::tip If you wish to share such profile (such as upload as supplementary material for academic publications), make sure to NOT include cluster specific paths to files, nor institutional specific profiles. @@ -245,7 +196,7 @@ The pipeline also dynamically loads configurations from [https://github.com/nf-c Note that multiple profiles can be loaded, for example: `-profile test,docker` - the order of arguments is important! They are loaded in sequence, so later profiles can overwrite earlier profiles. -If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer enviroment. +If `-profile` is not specified, the pipeline will run locally and expect all software to be installed and available on the `PATH`. This is _not_ recommended, since it can lead to different results on different machines dependent on the computer environment. - `debug` - A generic profile with settings to help with debugging the pipeline. It will use more verbose logging. @@ -289,7 +240,7 @@ To change the resource requests, please see the [max resources](https://nf-co.re ### Custom Containers -In some cases you may wish to change which container a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version maybe out of date. +In some cases you may wish to change which container a step of the pipeline uses for a particular tool. By default nf-core pipelines use containers and software from the [biocontainers](https://biocontainers.pro/) or [bioconda](https://bioconda.github.io/) projects. However in some cases the pipeline specified version may be out of date. To use a different container from the default container specified in a pipeline, please see the [updating tool versions](https://nf-co.re/docs/usage/configuration#updating-tool-versions) section of the nf-core website. @@ -314,7 +265,7 @@ Nextflow handles job submissions and supervises the running jobs. The Nextflow p The Nextflow `-bg` flag launches Nextflow in the background, detached from your terminal so that the workflow does not stop if you log out of your session. The logs are saved to a file. Alternatively, you can use `screen` / `tmux` or similar tool to create a detached session which you can log back into at a later time. -Some HPC setups also allow you to run nextflow within a cluster job submitted your job scheduler (from where it submits more jobs). +Some HPC setups also allow you to run nextflow within a cluster job submitted to your job scheduler (from where it submits more jobs). ## Nextflow memory requirements From 4b82db83740488818ab929801dc9f28e13e12db2 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:41:33 +0100 Subject: [PATCH 23/24] fix metro maps --- README.md | 1 - docs/images/metro_map_dark.md | 45 ++++ docs/images/metro_map_dark.mmd | 58 ------ docs/images/metro_map_dark.svg | 353 +++++++++----------------------- docs/images/metro_map_light.md | 45 ++++ docs/images/metro_map_light.mmd | 58 ------ docs/images/metro_map_light.svg | 353 +++++++++----------------------- 7 files changed, 278 insertions(+), 635 deletions(-) create mode 100644 docs/images/metro_map_dark.md delete mode 100644 docs/images/metro_map_dark.mmd create mode 100644 docs/images/metro_map_light.md delete mode 100644 docs/images/metro_map_light.mmd diff --git a/README.md b/README.md index 83b6f5e5..2d6849f9 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ Steps include: - Alignment QC using [`samtools flagstat`](http://www.htslib.org/doc/samtools-flagstat.html), [`samtools stats`](http://www.htslib.org/doc/samtools-stats.html), [`samtools idxstats`](http://www.htslib.org/doc/samtools-idxstats.html) and [`picard CollectHsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectHsMetrics), [`picard CollectWgsMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectWgsMetrics), [`picard CollectMultipleMetrics`](https://broadinstitute.github.io/picard/command-line-overview.html#CollectMultipleMetrics) - QC aggregation using [`multiqc`](https://multiqc.info/) -![metro map](docs/images/metro_map.png) diff --git a/docs/images/metro_map_dark.md b/docs/images/metro_map_dark.md new file mode 100644 index 00000000..65349f39 --- /dev/null +++ b/docs/images/metro_map_dark.md @@ -0,0 +1,45 @@ +```mermaid +%%metro logo: ./nf-cmgg-preprocessing_logo_dark.png +%%metro style: dark +%%metro line: main | Alignment and Postprocessing | #00ff00 +%%metro line: qc | Quality control | #ff0000 +%%metro file: BCL_IN | BCL +%%metro file: FASTQ_IN | FASTQ +%%metro file: CRAM_OUT | CRAM +%%metro file: MULTIQC_LIBRARY | HTML +%%metro file: MULTIQC_SAV | HTML +%%metro compact_offsets: true + +graph TD + + BCL_IN[] + FASTQ_IN[] + MULTIQC_SAV[] + CRAM_OUT[] + MULTIQC_LIBRARY[] + + BCL_IN -->|main | BCLCONVERT + BCL_IN -->|qc| MULTIQC_SAV + BCLCONVERT -->|qc| MULTIQC_SAV + + FASTQ_IN[] + FASTQ_IN -->|qc,main| FASTP + BCLCONVERT -->|qc| FALCO + BCLCONVERT -->|qc,main| FASTP + FALCO -->|qc| MULTIQC_LIBRARY + FASTP -->|qc| MULTIQC_LIBRARY + + FASTP -->|main| ALIGN + ALIGN -->|main| MARKDUP + MARKDUP -->|main| CRAM_OUT + + CRAM_OUT -->|qc| MOSDEPTH + CRAM_OUT -->|qc| SAMTOOLS_COV + MOSDEPTH -->|qc| MULTIQC_LIBRARY + SAMTOOLS_COV -->|qc| MULTIQC_LIBRARY + + CRAM_OUT -->|qc| SAMTOOLS_QC + CRAM_OUT -->|qc| PICARD + SAMTOOLS_QC -->|qc| MULTIQC_LIBRARY + PICARD -->|qc| MULTIQC_LIBRARY +``` diff --git a/docs/images/metro_map_dark.mmd b/docs/images/metro_map_dark.mmd deleted file mode 100644 index 4c4458e3..00000000 --- a/docs/images/metro_map_dark.mmd +++ /dev/null @@ -1,58 +0,0 @@ -%%metro title: nf-cmgg/preprocessing -%%metro style: nf-core -%%metro line: demux | Demultiplexing | #0000ff -%%metro line: alignment | Alignment and Postprocessing | #00ff00 -%%metro line: qc | Quality control | #ff0000 -%%metro file: BCL_IN | BCL -%%metro file: FASTQ_IN | FASTQ -%%metro line_order: span -%%metro compact_offsets: true - -graph TD - BCL_IN[] - FASTQ_IN[] - MULTIQC_LIBRARY - MULTIQC_SAV - - subgraph Demultiplexing - BCL_IN -->|demux| BCLCONVERT - BCL_IN -->|qc| MULTIQC_SAV - BCLCONVERT -->|qc| MULTIQC_SAV - end - - subgraph FASTQ_QC - FASTQ_IN -->|qc| FALCO - FASTQ_IN -->|qc| FASTP - BCLCONVERT -->|qc| FALCO - BCLCONVERT -->|qc| FASTP - FALCO -->|qc| MULTIQC_LIBRARY - FASTP -->|qc| MULTIQC_LIBRARY - end - - _CRAM - - subgraph Alignment_and_Postprocessing - FASTQ_IN -->|alignment| ALIGN - BCLCONVERT -->|alignment| ALIGN - - ALIGN -->|alignment| MARKDUP - MARKDUP -->|alignment| _CRAM - end - - _QC_COLLECT - - subgraph COVERAGE_QC - _CRAM -->|qc| MOSDEPTH - _CRAM -->|qc| SAMTOOLS_COV - MOSDEPTH -->|qc| _QC_COLLECT - SAMTOOLS_COV -->|qc| _QC_COLLECT - end - - subgraph BAM_QC - _CRAM -->|qc| SAMTOOLS_QC - _CRAM -->|qc| PICARD - SAMTOOLS_QC -->|qc| _QC_COLLECT - PICARD -->|qc| _QC_COLLECT - end - - _QC_COLLECT -->|qc| MULTIQC_LIBRARY diff --git a/docs/images/metro_map_dark.svg b/docs/images/metro_map_dark.svg index 621e5caa..50767fc6 100644 --- a/docs/images/metro_map_dark.svg +++ b/docs/images/metro_map_dark.svg @@ -1,264 +1,99 @@ + width="911" height="526" viewBox="0 0 911 526"> - - - -1 -demultiplexing - - -2 -fastq_qc - - -3 -alignment_dna - - -4 -alignment_rna - - -5 -alignment_postprocessing - - -6 -alignment_qc - - -7 -alignment_qc_wgs - - -8 -alignment_qc_targetted - - -9 -coverage_qc - - -10 -reporting - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BCL - - - - - - - -FASTQ - - - - -FASTQ - - - - - - - - - - - - - - -CRAM - - - - - - - - - - - - - - - -HTML -BCL -fastq_in -MultiQC-SAV -Library MultiQC -falco -BWA-MEM -STAR -samtools flagstat -picard collectwgsmetrics -picard collecthsmetrics -mosdepth -fastq_out -BWA-MEM2 -samtools stats -samtools coverage -Dragmap -samtools idxstats -panelcoverage -SNAP -picard collectmultiplemetrics -StrobeAlign -bcl-convert -fastp -bamsormadup -samtools sort -QC Reports -samtools sormadup -samtools convert -cram_out - - - -Main - -RNA Alignment - -DNA Alignment - -Alignment Postprocessing - -Quality Control -created with nf-metro v0.4.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BCL + + + + + +HTML + + + + +FASTQ + + + + + + +HTML + + + + + + +CRAM + + + + +BCL_IN +FASTQ_IN +BCLCONVERT +MULTIQC_SAV +FASTP +FALCO +ALIGN +MARKDUP +CRAM_OUT +MOSDEPTH +SAMTOOLS_COV +SAMTOOLS_QC +PICARD +MULTIQC_LIBRARY + + + +Alignment and Postprocessing + +Quality control +created with nf-metro v0.5.4 diff --git a/docs/images/metro_map_light.md b/docs/images/metro_map_light.md new file mode 100644 index 00000000..5cd6a5b0 --- /dev/null +++ b/docs/images/metro_map_light.md @@ -0,0 +1,45 @@ +```mermaid +%%metro logo: ./nf-cmgg-preprocessing_logo_light.png +%%metro style: light +%%metro line: main | Alignment and Postprocessing | #00ff00 +%%metro line: qc | Quality control | #ff0000 +%%metro file: BCL_IN | BCL +%%metro file: FASTQ_IN | FASTQ +%%metro file: CRAM_OUT | CRAM +%%metro file: MULTIQC_LIBRARY | HTML +%%metro file: MULTIQC_SAV | HTML +%%metro compact_offsets: true + +graph TD + + BCL_IN[] + FASTQ_IN[] + MULTIQC_SAV[] + CRAM_OUT[] + MULTIQC_LIBRARY[] + + BCL_IN -->|main | BCLCONVERT + BCL_IN -->|qc| MULTIQC_SAV + BCLCONVERT -->|qc| MULTIQC_SAV + + FASTQ_IN[] + FASTQ_IN -->|qc,main| FASTP + BCLCONVERT -->|qc| FALCO + BCLCONVERT -->|qc,main| FASTP + FALCO -->|qc| MULTIQC_LIBRARY + FASTP -->|qc| MULTIQC_LIBRARY + + FASTP -->|main| ALIGN + ALIGN -->|main| MARKDUP + MARKDUP -->|main| CRAM_OUT + + CRAM_OUT -->|qc| MOSDEPTH + CRAM_OUT -->|qc| SAMTOOLS_COV + MOSDEPTH -->|qc| MULTIQC_LIBRARY + SAMTOOLS_COV -->|qc| MULTIQC_LIBRARY + + CRAM_OUT -->|qc| SAMTOOLS_QC + CRAM_OUT -->|qc| PICARD + SAMTOOLS_QC -->|qc| MULTIQC_LIBRARY + PICARD -->|qc| MULTIQC_LIBRARY +``` diff --git a/docs/images/metro_map_light.mmd b/docs/images/metro_map_light.mmd deleted file mode 100644 index 4c4458e3..00000000 --- a/docs/images/metro_map_light.mmd +++ /dev/null @@ -1,58 +0,0 @@ -%%metro title: nf-cmgg/preprocessing -%%metro style: nf-core -%%metro line: demux | Demultiplexing | #0000ff -%%metro line: alignment | Alignment and Postprocessing | #00ff00 -%%metro line: qc | Quality control | #ff0000 -%%metro file: BCL_IN | BCL -%%metro file: FASTQ_IN | FASTQ -%%metro line_order: span -%%metro compact_offsets: true - -graph TD - BCL_IN[] - FASTQ_IN[] - MULTIQC_LIBRARY - MULTIQC_SAV - - subgraph Demultiplexing - BCL_IN -->|demux| BCLCONVERT - BCL_IN -->|qc| MULTIQC_SAV - BCLCONVERT -->|qc| MULTIQC_SAV - end - - subgraph FASTQ_QC - FASTQ_IN -->|qc| FALCO - FASTQ_IN -->|qc| FASTP - BCLCONVERT -->|qc| FALCO - BCLCONVERT -->|qc| FASTP - FALCO -->|qc| MULTIQC_LIBRARY - FASTP -->|qc| MULTIQC_LIBRARY - end - - _CRAM - - subgraph Alignment_and_Postprocessing - FASTQ_IN -->|alignment| ALIGN - BCLCONVERT -->|alignment| ALIGN - - ALIGN -->|alignment| MARKDUP - MARKDUP -->|alignment| _CRAM - end - - _QC_COLLECT - - subgraph COVERAGE_QC - _CRAM -->|qc| MOSDEPTH - _CRAM -->|qc| SAMTOOLS_COV - MOSDEPTH -->|qc| _QC_COLLECT - SAMTOOLS_COV -->|qc| _QC_COLLECT - end - - subgraph BAM_QC - _CRAM -->|qc| SAMTOOLS_QC - _CRAM -->|qc| PICARD - SAMTOOLS_QC -->|qc| _QC_COLLECT - PICARD -->|qc| _QC_COLLECT - end - - _QC_COLLECT -->|qc| MULTIQC_LIBRARY diff --git a/docs/images/metro_map_light.svg b/docs/images/metro_map_light.svg index 621e5caa..49817c64 100644 --- a/docs/images/metro_map_light.svg +++ b/docs/images/metro_map_light.svg @@ -1,264 +1,99 @@ + width="911" height="526" viewBox="0 0 911 526"> - - - -1 -demultiplexing - - -2 -fastq_qc - - -3 -alignment_dna - - -4 -alignment_rna - - -5 -alignment_postprocessing - - -6 -alignment_qc - - -7 -alignment_qc_wgs - - -8 -alignment_qc_targetted - - -9 -coverage_qc - - -10 -reporting - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BCL - - - - - - - -FASTQ - - - - -FASTQ - - - - - - - - - - - - - - -CRAM - - - - - - - - - - - - - - - -HTML -BCL -fastq_in -MultiQC-SAV -Library MultiQC -falco -BWA-MEM -STAR -samtools flagstat -picard collectwgsmetrics -picard collecthsmetrics -mosdepth -fastq_out -BWA-MEM2 -samtools stats -samtools coverage -Dragmap -samtools idxstats -panelcoverage -SNAP -picard collectmultiplemetrics -StrobeAlign -bcl-convert -fastp -bamsormadup -samtools sort -QC Reports -samtools sormadup -samtools convert -cram_out - - - -Main - -RNA Alignment - -DNA Alignment - -Alignment Postprocessing - -Quality Control -created with nf-metro v0.4.4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +BCL + + + + + +HTML + + + + +FASTQ + + + + + + +HTML + + + + + + +CRAM + + + + +BCL_IN +FASTQ_IN +BCLCONVERT +MULTIQC_SAV +FASTP +FALCO +ALIGN +MARKDUP +CRAM_OUT +MOSDEPTH +SAMTOOLS_COV +SAMTOOLS_QC +PICARD +MULTIQC_LIBRARY + + + +Alignment and Postprocessing + +Quality control +created with nf-metro v0.5.4 From 108fe63432199af84652ad94c1b235526ef97e56 Mon Sep 17 00:00:00 2001 From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com> Date: Fri, 6 Mar 2026 11:51:06 +0100 Subject: [PATCH 24/24] more metro fixes --- docs/images/metro_map_dark.svg | 2 +- docs/images/metro_map_light.svg | 173 +++++++++--------- .../nf-cmgg-preprocessing_logo_dark.png | Bin 79933 -> 65764 bytes .../nf-cmgg-preprocessing_logo_dark.svg | 2 +- .../nf-cmgg-preprocessing_logo_light.png | Bin 79022 -> 65952 bytes .../nf-cmgg-preprocessing_logo_light.svg | 14 +- 6 files changed, 98 insertions(+), 93 deletions(-) diff --git a/docs/images/metro_map_dark.svg b/docs/images/metro_map_dark.svg index 50767fc6..0f452bc5 100644 --- a/docs/images/metro_map_dark.svg +++ b/docs/images/metro_map_dark.svg @@ -90,7 +90,7 @@ PICARD MULTIQC_LIBRARY - + Alignment and Postprocessing diff --git a/docs/images/metro_map_light.svg b/docs/images/metro_map_light.svg index 49817c64..ac3be697 100644 --- a/docs/images/metro_map_light.svg +++ b/docs/images/metro_map_light.svg @@ -3,97 +3,102 @@ width="911" height="526" viewBox="0 0 911 526"> - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - - - - -BCL - - - - - -HTML - - - - -FASTQ - - - - - - -HTML - - - - - - -CRAM - - - - -BCL_IN -FASTQ_IN -BCLCONVERT -MULTIQC_SAV -FASTP -FALCO -ALIGN -MARKDUP -CRAM_OUT -MOSDEPTH -SAMTOOLS_COV -SAMTOOLS_QC -PICARD -MULTIQC_LIBRARY - - - -Alignment and Postprocessing - -Quality control + + + + + +BCL + + + + + +HTML + + + + +FASTQ + + + + + + +HTML + + + + + + +CRAM + + + + +BCL_IN +FASTQ_IN +BCLCONVERT +MULTIQC_SAV +FASTP +FALCO +ALIGN +MARKDUP +CRAM_OUT +MOSDEPTH +SAMTOOLS_COV +SAMTOOLS_QC +PICARD +MULTIQC_LIBRARY + + + +Alignment and Postprocessing + +Quality control created with nf-metro v0.5.4 diff --git a/docs/images/nf-cmgg-preprocessing_logo_dark.png b/docs/images/nf-cmgg-preprocessing_logo_dark.png index 2f2054b49e9f08c2b5d76141ceca5b742de102bc..d91e637970729ada5a11e67dc057fab103f24166 100644 GIT binary patch delta 32931 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 diff --git a/docs/images/nf-cmgg-preprocessing_logo_dark.svg b/docs/images/nf-cmgg-preprocessing_logo_dark.svg index b416b9e6..dd5620b1 100644 --- a/docs/images/nf-cmgg-preprocessing_logo_dark.svg +++ b/docs/images/nf-cmgg-preprocessing_logo_dark.svg @@ -124,7 +124,7 @@ class="st1 st2" font-size="209.87" font-weight="bold" - style="font-weight:700;font-size:209.86720276px;font-family:Arial, Helvetica, sans-serif;;fill:#fafafa">preprocessingpreprocZt3oLhx>k> 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�kc{-+4bKpbyyJ(&qIUdYyzY{7}vI1#y5^u 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 XTZ%L%oEjz$TZGUuyoJ}afB3%uAlg6z literal 79022 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.st0{fill:#24af63}.st1{font-family:Arial, Helvetica, sans-serif;font-weight:bold;}.st2{font-size:209.8672px}.st4{fill:#ecdc86}.st7{fill:#396e35}nf-nf-cmgg/preprocessingpreproc