") },
{ assert path(process.out.log.get(0).get(1)).getText().contains("total bases: 13683") },
{ assert snapshot(
- process.out.json,
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
@@ -250,14 +282,20 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = true
+ save_trimmed_fail = false
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:true ],
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = true
- input[3] = false
- input[4] = false
+
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -268,7 +306,6 @@ nextflow_process {
{ assert path(process.out.html.get(0).get(1)).getText().contains("single end (151 cycles)") },
{ assert path(process.out.log.get(0).get(1)).getText().contains("reads passed filter: 99") },
{ assert snapshot(
- process.out.json,
process.out.reads,
process.out.reads,
process.out.reads_fail,
@@ -285,15 +322,22 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = true
+ save_trimmed_fail = false
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:false ], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)
+ ],
+ adapter_fasta
])
- input[1] = []
- input[2] = true
- input[3] = false
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -304,7 +348,6 @@ nextflow_process {
{ assert path(process.out.html.get(0).get(1)).getText().contains("The input has little adapter percentage (~0.000000%), probably it's trimmed before.") },
{ assert path(process.out.log.get(0).get(1)).getText().contains("Q30 bases: 12281(88.3716%)") },
{ assert snapshot(
- process.out.json,
process.out.reads,
process.out.reads,
process.out.reads_fail,
@@ -324,14 +367,19 @@ nextflow_process {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = false
+ save_trimmed_fail = false
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:true ],
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = false
- input[3] = false
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -352,20 +400,20 @@ nextflow_process {
process {
"""
- adapter_fasta = []
- save_trimmed_pass = true
- save_trimmed_fail = false
- save_merged = false
+ adapter_fasta = []
+ discard_trimmed_pass = false
+ save_trimmed_fail = false
+ save_merged = false
input[0] = Channel.of([
[ id:'test', single_end:false ], // meta map
[ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = false
- input[3] = false
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -386,14 +434,19 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = false
+ save_trimmed_fail = false
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:true ], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ]
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = false
- input[3] = false
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -414,14 +467,19 @@ nextflow_process {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = false
+ save_trimmed_fail = true
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:true ], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = false
- input[3] = true
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -442,15 +500,20 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = false
+ save_trimmed_fail = true
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:false ], // meta map
[ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)]
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)],
+ adapter_fasta
])
- input[1] = []
- input[2] = false
- input[3] = true
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -470,15 +533,20 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = false
+ save_trimmed_fail = false
+ save_merged = true
+
input[0] = Channel.of([
[ id:'test', single_end:false ], // meta map
[ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = false
- input[3] = false
- input[4] = true
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -498,15 +566,22 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true)
+ discard_trimmed_pass = false
+ save_trimmed_fail = false
+ save_merged = true
+
input[0] = Channel.of([
[ id:'test', single_end:false ], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)
+ ],
+ adapter_fasta
])
- input[1] = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ])
- input[2] = false
- input[3] = false
- input[4] = true
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -526,14 +601,19 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = true
+ save_trimmed_fail = false
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:true ],
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = true
- input[3] = false
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -553,15 +633,20 @@ nextflow_process {
when {
process {
"""
+ adapter_fasta = []
+ discard_trimmed_pass = true
+ save_trimmed_fail = false
+ save_merged = false
+
input[0] = Channel.of([
[ id:'test', single_end:false ], // meta map
[ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ],
+ adapter_fasta
])
- input[1] = []
- input[2] = true
- input[3] = false
- input[4] = false
+ input[1] = discard_trimmed_pass
+ input[2] = save_trimmed_fail
+ input[3] = save_merged
"""
}
}
@@ -573,4 +658,4 @@ nextflow_process {
)
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap
index 54be7e45..a30c680d 100644
--- a/modules/nf-core/fastp/tests/main.nf.test.snap
+++ b/modules/nf-core/fastp/tests/main.nf.test.snap
@@ -39,7 +39,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -78,27 +78,18 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T14:31:10.841098"
+ "timestamp": "2025-09-11T09:55:42.073182"
},
"test_fastp_paired_end": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,1e0f8e27e71728e2b63fc64086be95cd"
- ]
- ],
[
[
{
@@ -118,26 +109,17 @@
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:43:28.665779"
+ "timestamp": "2025-09-19T16:23:12.436191"
},
"test_fastp_paired_end_merged_adapterlist": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,5914ca3f21ce162123a824e33e8564f6"
- ]
- ],
[
[
{
@@ -163,26 +145,17 @@
]
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:44:18.210375"
+ "timestamp": "2025-09-19T16:23:32.267735"
},
"test_fastp_single_end_qc_only": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.json:md5,5cc5f01e449309e0e689ed6f51a2294a"
- ]
- ],
[
],
@@ -202,14 +175,14 @@
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:44:27.380974"
+ "timestamp": "2025-09-19T16:23:36.149003"
},
"test_fastp_paired_end_trim_fail": {
"content": [
@@ -242,23 +215,14 @@
],
[
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,4c3268ddb50ea5b33125984776aa3519"
- ]
- ],
- [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:43:58.749589"
+ "timestamp": "2025-09-19T16:23:24.23891"
},
"fastp - stub test_fastp_interleaved": {
"content": [
@@ -306,7 +270,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -351,15 +315,15 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:50:00.270029"
+ "timestamp": "2025-09-11T09:55:19.47199"
},
"test_fastp_single_end - stub": {
"content": [
@@ -407,7 +371,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -452,15 +416,15 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:49:42.502789"
+ "timestamp": "2025-09-11T09:55:09.617001"
},
"test_fastp_paired_end_merged_adapterlist - stub": {
"content": [
@@ -517,7 +481,7 @@
]
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -571,15 +535,15 @@
]
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:54:53.458252"
+ "timestamp": "2025-09-11T09:55:37.413738"
},
"test_fastp_paired_end_merged - stub": {
"content": [
@@ -636,7 +600,7 @@
]
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -690,27 +654,18 @@
]
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:50:27.689379"
+ "timestamp": "2025-09-11T09:55:32.965652"
},
"test_fastp_paired_end_merged": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,b712fd68ed0322f4bec49ff2a5237fcc"
- ]
- ],
[
[
{
@@ -736,14 +691,14 @@
]
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:44:08.68476"
+ "timestamp": "2025-09-19T16:23:28.074624"
},
"test_fastp_paired_end - stub": {
"content": [
@@ -794,7 +749,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -842,27 +797,18 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:49:51.679221"
+ "timestamp": "2025-09-11T09:55:14.414258"
},
"test_fastp_single_end": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc"
- ]
- ],
[
[
{
@@ -879,14 +825,14 @@
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:43:18.834322"
+ "timestamp": "2025-09-19T16:23:08.469846"
},
"test_fastp_single_end_trim_fail - stub": {
"content": [
@@ -940,7 +886,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -991,15 +937,15 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T14:05:36.898142"
+ "timestamp": "2025-09-11T09:55:23.871395"
},
"test_fastp_paired_end_trim_fail - stub": {
"content": [
@@ -1060,7 +1006,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -1118,15 +1064,15 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T14:05:49.212847"
+ "timestamp": "2025-09-11T09:55:28.399328"
},
"fastp test_fastp_interleaved": {
"content": [
@@ -1140,35 +1086,17 @@
]
],
[
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22"
- ]
- ],
- [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:43:38.910832"
+ "timestamp": "2025-09-19T16:23:16.479494"
},
"test_fastp_single_end_trim_fail": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5"
- ]
- ],
[
[
{
@@ -1191,26 +1119,17 @@
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:43:48.22378"
+ "timestamp": "2025-09-19T16:23:20.299076"
},
"test_fastp_paired_end_qc_only": {
"content": [
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.fastp.json:md5,623064a45912dac6f2b64e3f2e9901df"
- ]
- ],
[
],
@@ -1230,14 +1149,14 @@
],
[
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T13:44:36.334938"
+ "timestamp": "2025-09-19T16:23:40.113724"
},
"test_fastp_paired_end_qc_only - stub": {
"content": [
@@ -1279,7 +1198,7 @@
],
"6": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
],
"html": [
[
@@ -1318,14 +1237,14 @@
],
"versions": [
- "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02"
+ "versions.yml:md5,c4974822658d02533e660fae343f281b"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-07-05T14:31:27.096468"
+ "timestamp": "2025-09-11T09:55:46.696419"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/fastp/tests/tags.yml b/modules/nf-core/fastp/tests/tags.yml
deleted file mode 100644
index c1afcce7..00000000
--- a/modules/nf-core/fastp/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-fastp:
- - modules/nf-core/fastp/**
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 68e017b1..48c7b0d1 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -205,7 +205,7 @@ workflow PREPROCESSING {
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq], adapter_fasta, save_trimmed, save_merged)
- FASTP(ch_fastq_per_sample, [], false, false, false)
+ FASTP(ch_fastq_per_sample.map{ meta, fastq -> return [meta, fastq, []] }, false, false, false)
ch_multiqc_files = ch_multiqc_files.mix(
FASTP.out.json.map { _meta, json ->
return json
From 76146afe67d3b4e87a47cb208bc1549cf63a0778 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:39:13 +0100
Subject: [PATCH 052/228] ditch fastqc
---
.nf-core.yml | 2 +-
modules.json | 5 -
modules/nf-core/fastqc/environment.yml | 7 -
modules/nf-core/fastqc/main.nf | 64 ---
modules/nf-core/fastqc/meta.yml | 72 ----
modules/nf-core/fastqc/tests/main.nf.test | 309 --------------
.../nf-core/fastqc/tests/main.nf.test.snap | 392 ------------------
7 files changed, 1 insertion(+), 850 deletions(-)
delete mode 100644 modules/nf-core/fastqc/environment.yml
delete mode 100644 modules/nf-core/fastqc/main.nf
delete mode 100644 modules/nf-core/fastqc/meta.yml
delete mode 100644 modules/nf-core/fastqc/tests/main.nf.test
delete mode 100644 modules/nf-core/fastqc/tests/main.nf.test.snap
diff --git a/.nf-core.yml b/.nf-core.yml
index dc7ee414..09005197 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -38,5 +38,5 @@ template:
name: preprocessing
org: nf-cmgg
outdir: .
- skip_features: []
+ skip_features: ["fastqc"]
version: 2.1.0dev
diff --git a/modules.json b/modules.json
index d46b407d..f665a1c2 100644
--- a/modules.json
+++ b/modules.json
@@ -51,11 +51,6 @@
"installed_by": ["modules"],
"patch": "modules/nf-core/fastp/fastp.diff"
},
- "fastqc": {
- "branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["modules"]
- },
"md5sum": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
diff --git a/modules/nf-core/fastqc/environment.yml b/modules/nf-core/fastqc/environment.yml
deleted file mode 100644
index f9f54ee9..00000000
--- a/modules/nf-core/fastqc/environment.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
-channels:
- - conda-forge
- - bioconda
-dependencies:
- - bioconda::fastqc=0.12.1
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
deleted file mode 100644
index 23e16634..00000000
--- a/modules/nf-core/fastqc/main.nf
+++ /dev/null
@@ -1,64 +0,0 @@
-process FASTQC {
- tag "${meta.id}"
- label 'process_medium'
-
- conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/fastqc:0.12.1--hdfd78af_0' :
- 'biocontainers/fastqc:0.12.1--hdfd78af_0' }"
-
- input:
- tuple val(meta), path(reads)
-
- output:
- tuple val(meta), path("*.html"), emit: html
- tuple val(meta), path("*.zip") , emit: zip
- path "versions.yml" , emit: versions
-
- when:
- task.ext.when == null || task.ext.when
-
- script:
- def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
- // Make list of old name and new name pairs to use for renaming in the bash while loop
- def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] }
- def rename_to = old_new_pairs*.join(' ').join(' ')
- def renamed_files = old_new_pairs.collect{ _old_name, new_name -> new_name }.join(' ')
-
- // The total amount of allocated RAM by FastQC is equal to the number of threads defined (--threads) time the amount of RAM defined (--memory)
- // https://github.com/s-andrews/FastQC/blob/1faeea0412093224d7f6a07f777fad60a5650795/fastqc#L211-L222
- // Dividing the task.memory by task.cpu allows to stick to requested amount of RAM in the label
- def memory_in_mb = task.memory ? task.memory.toUnit('MB') / task.cpus : null
- // FastQC memory value allowed range (100 - 10000)
- def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb)
-
- """
- printf "%s %s\\n" ${rename_to} | while read old_name new_name; do
- [ -f "\${new_name}" ] || ln -s \$old_name \$new_name
- done
-
- fastqc \\
- ${args} \\
- --threads ${task.cpus} \\
- --memory ${fastqc_memory} \\
- ${renamed_files}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' )
- END_VERSIONS
- """
-
- stub:
- def prefix = task.ext.prefix ?: "${meta.id}"
- """
- touch ${prefix}.html
- touch ${prefix}.zip
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- fastqc: \$( fastqc --version | sed '/FastQC v/!d; s/.*v//' )
- END_VERSIONS
- """
-}
diff --git a/modules/nf-core/fastqc/meta.yml b/modules/nf-core/fastqc/meta.yml
deleted file mode 100644
index c8d9d025..00000000
--- a/modules/nf-core/fastqc/meta.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: fastqc
-description: Run FastQC on sequenced reads
-keywords:
- - quality control
- - qc
- - adapters
- - fastq
-tools:
- - fastqc:
- description: |
- FastQC gives general quality metrics about your reads.
- It provides information about the quality score distribution
- across your reads, the per base sequence content (%A/C/G/T).
-
- You get information about adapter contamination and other
- overrepresented sequences.
- homepage: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/
- documentation: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/Help/
- licence: ["GPL-2.0-only"]
- identifier: biotools:fastqc
-input:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - reads:
- type: file
- description: |
- List of input FastQ files of size 1 and 2 for single-end and paired-end data,
- respectively.
- ontologies: []
-output:
- html:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - "*.html":
- type: file
- description: FastQC report
- pattern: "*_{fastqc.html}"
- ontologies: []
- zip:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - "*.zip":
- type: file
- description: FastQC report archive
- pattern: "*_{fastqc.zip}"
- ontologies: []
- versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
-authors:
- - "@drpatelh"
- - "@grst"
- - "@ewels"
- - "@FelixKrueger"
-maintainers:
- - "@drpatelh"
- - "@grst"
- - "@ewels"
- - "@FelixKrueger"
diff --git a/modules/nf-core/fastqc/tests/main.nf.test b/modules/nf-core/fastqc/tests/main.nf.test
deleted file mode 100644
index e9d79a07..00000000
--- a/modules/nf-core/fastqc/tests/main.nf.test
+++ /dev/null
@@ -1,309 +0,0 @@
-nextflow_process {
-
- name "Test Process FASTQC"
- script "../main.nf"
- process "FASTQC"
-
- tag "modules"
- tag "modules_nfcore"
- tag "fastqc"
-
- test("sarscov2 single-end [fastq]") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [ id: 'test', single_end:true ],
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- // NOTE The report contains the date inside it, which means that the md5sum is stable per day, but not longer than that. So you can't md5sum it.
- // looks like this:
- // https://github.com/nf-core/modules/pull/3903#issuecomment-1743620039
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("
File type Conventional base calls ") },
- { assert snapshot(process.out.versions).match() }
- )
- }
- }
-
- test("sarscov2 paired-end [fastq]") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" },
- { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" },
- { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" },
- { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" },
- { assert path(process.out.html[0][1][0]).text.contains("
File type Conventional base calls ") },
- { assert path(process.out.html[0][1][1]).text.contains("
File type Conventional base calls ") },
- { assert snapshot(process.out.versions).match() }
- )
- }
- }
-
- test("sarscov2 interleaved [fastq]") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("
File type Conventional base calls ") },
- { assert snapshot(process.out.versions).match() }
- )
- }
- }
-
- test("sarscov2 paired-end [bam]") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert process.out.html[0][1] ==~ ".*/test_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/test_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("
File type Conventional base calls ") },
- { assert snapshot(process.out.versions).match() }
- )
- }
- }
-
- test("sarscov2 multiple [fastq]") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert process.out.html[0][1][0] ==~ ".*/test_1_fastqc.html" },
- { assert process.out.html[0][1][1] ==~ ".*/test_2_fastqc.html" },
- { assert process.out.html[0][1][2] ==~ ".*/test_3_fastqc.html" },
- { assert process.out.html[0][1][3] ==~ ".*/test_4_fastqc.html" },
- { assert process.out.zip[0][1][0] ==~ ".*/test_1_fastqc.zip" },
- { assert process.out.zip[0][1][1] ==~ ".*/test_2_fastqc.zip" },
- { assert process.out.zip[0][1][2] ==~ ".*/test_3_fastqc.zip" },
- { assert process.out.zip[0][1][3] ==~ ".*/test_4_fastqc.zip" },
- { assert path(process.out.html[0][1][0]).text.contains("
File type Conventional base calls ") },
- { assert path(process.out.html[0][1][1]).text.contains("
File type Conventional base calls ") },
- { assert path(process.out.html[0][1][2]).text.contains("
File type Conventional base calls ") },
- { assert path(process.out.html[0][1][3]).text.contains("
File type Conventional base calls ") },
- { assert snapshot(process.out.versions).match() }
- )
- }
- }
-
- test("sarscov2 custom_prefix") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [ id:'mysample', single_end:true ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert process.out.html[0][1] ==~ ".*/mysample_fastqc.html" },
- { assert process.out.zip[0][1] ==~ ".*/mysample_fastqc.zip" },
- { assert path(process.out.html[0][1]).text.contains("
File type Conventional base calls ") },
- { assert snapshot(process.out.versions).match() }
- )
- }
- }
-
- test("sarscov2 single-end [fastq] - stub") {
-
- options "-stub"
- when {
- process {
- """
- input[0] = Channel.of([
- [ id: 'test', single_end:true ],
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 paired-end [fastq] - stub") {
-
- options "-stub"
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 interleaved [fastq] - stub") {
-
- options "-stub"
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 paired-end [bam] - stub") {
-
- options "-stub"
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 multiple [fastq] - stub") {
-
- options "-stub"
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test2_2.fastq.gz', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 custom_prefix - stub") {
-
- options "-stub"
- when {
- process {
- """
- input[0] = Channel.of([
- [ id:'mysample', single_end:true ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll (
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-}
diff --git a/modules/nf-core/fastqc/tests/main.nf.test.snap b/modules/nf-core/fastqc/tests/main.nf.test.snap
deleted file mode 100644
index d5db3092..00000000
--- a/modules/nf-core/fastqc/tests/main.nf.test.snap
+++ /dev/null
@@ -1,392 +0,0 @@
-{
- "sarscov2 custom_prefix": {
- "content": [
- [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ]
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:02:16.374038"
- },
- "sarscov2 single-end [fastq] - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "zip": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:02:24.993809"
- },
- "sarscov2 custom_prefix - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "mysample",
- "single_end": true
- },
- "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- {
- "id": "mysample",
- "single_end": true
- },
- "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "html": [
- [
- {
- "id": "mysample",
- "single_end": true
- },
- "mysample.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "zip": [
- [
- {
- "id": "mysample",
- "single_end": true
- },
- "mysample.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:03:10.93942"
- },
- "sarscov2 interleaved [fastq]": {
- "content": [
- [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ]
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:01:42.355718"
- },
- "sarscov2 paired-end [bam]": {
- "content": [
- [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ]
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:01:53.276274"
- },
- "sarscov2 multiple [fastq]": {
- "content": [
- [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ]
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:02:05.527626"
- },
- "sarscov2 paired-end [fastq]": {
- "content": [
- [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ]
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:01:31.188871"
- },
- "sarscov2 paired-end [fastq] - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "zip": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:02:34.273566"
- },
- "sarscov2 multiple [fastq] - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "zip": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:03:02.304411"
- },
- "sarscov2 single-end [fastq]": {
- "content": [
- [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ]
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:01:19.095607"
- },
- "sarscov2 interleaved [fastq] - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "zip": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:02:44.640184"
- },
- "sarscov2 paired-end [bam] - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "html": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.html:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,e1cc25ca8af856014824abd842e93978"
- ],
- "zip": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.zip:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.3"
- },
- "timestamp": "2024-07-22T11:02:53.550742"
- }
-}
\ No newline at end of file
From 75914494829a656f9706039b134382be7996b2c7 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:40:20 +0100
Subject: [PATCH 053/228] bump md5sum
---
modules.json | 2 +-
modules/nf-core/md5sum/tests/nextflow.config | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules.json b/modules.json
index f665a1c2..02f245b1 100644
--- a/modules.json
+++ b/modules.json
@@ -53,7 +53,7 @@
},
"md5sum": {
"branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
"installed_by": ["modules"]
},
"mosdepth": {
diff --git a/modules/nf-core/md5sum/tests/nextflow.config b/modules/nf-core/md5sum/tests/nextflow.config
index de999064..4acada55 100644
--- a/modules/nf-core/md5sum/tests/nextflow.config
+++ b/modules/nf-core/md5sum/tests/nextflow.config
@@ -1,2 +1,2 @@
-process.ext.args = '--tag'
\ No newline at end of file
+process.ext.args = '--tag'
From 343b30b67c895cc9b7e229927b8f0165e86199e1 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:41:00 +0100
Subject: [PATCH 054/228] bump mosdepth
---
modules.json | 2 +-
modules/nf-core/mosdepth/environment.yml | 6 +-
modules/nf-core/mosdepth/main.nf | 4 +-
modules/nf-core/mosdepth/meta.yml | 76 ++++++----
.../nf-core/mosdepth/tests/main.nf.test.snap | 132 +++++++++---------
.../nf-core/mosdepth/tests/quantized.config | 2 +-
modules/nf-core/mosdepth/tests/tags.yml | 2 -
.../nf-core/mosdepth/tests/threshold.config | 2 +-
modules/nf-core/mosdepth/tests/window.config | 2 +-
9 files changed, 124 insertions(+), 104 deletions(-)
delete mode 100644 modules/nf-core/mosdepth/tests/tags.yml
diff --git a/modules.json b/modules.json
index 02f245b1..5f6ae14d 100644
--- a/modules.json
+++ b/modules.json
@@ -58,7 +58,7 @@
},
"mosdepth": {
"branch": "master",
- "git_sha": "666652151335353eef2fcd58880bcef5bc2928e1",
+ "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
"installed_by": ["modules"],
"patch": "modules/nf-core/mosdepth/mosdepth.diff"
},
diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml
index e9379873..97c93721 100644
--- a/modules/nf-core/mosdepth/environment.yml
+++ b/modules/nf-core/mosdepth/environment.yml
@@ -1,6 +1,10 @@
+---
+# 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/mosdepth
- - mosdepth=0.3.8
+ - mosdepth=0.3.11=h0ec343a_1
+ # renovate: datasource=conda depName=bioconda/htslib
+ - htslib=1.22.1
diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf
index 3631cdb3..8166ac0b 100644
--- a/modules/nf-core/mosdepth/main.nf
+++ b/modules/nf-core/mosdepth/main.nf
@@ -4,8 +4,8 @@ process MOSDEPTH {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/mosdepth:0.3.8--hd299d5a_0' :
- 'biocontainers/mosdepth:0.3.8--hd299d5a_0'}"
+ 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/00/00d32b53160c26794959da7303ee6e2107afd4d292060c9f287b0af1fddbd847/data' :
+ 'community.wave.seqera.io/library/mosdepth_htslib:0f58993cb6d93294'}"
input:
tuple val(meta), path(bam), path(bai), path(bed), path(fasta)
diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml
index dc783c90..af1ea44a 100644
--- a/modules/nf-core/mosdepth/meta.yml
+++ b/modules/nf-core/mosdepth/meta.yml
@@ -23,14 +23,17 @@ input:
type: file
description: Input BAM/CRAM file
pattern: "*.{bam,cram}"
+ ontologies: []
- bai:
type: file
description: Index for BAM/CRAM file
pattern: "*.{bai,crai}"
+ ontologies: []
- bed:
type: file
description: BED file with intersected intervals
pattern: "*.{bed}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -40,9 +43,10 @@ input:
type: file
description: Reference genome FASTA file
pattern: "*.{fa,fasta}"
+ ontologies: []
output:
- - global_txt:
- - meta:
+ global_txt:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -51,8 +55,9 @@ output:
type: file
description: Text file with global cumulative coverage distribution
pattern: "*.{global.dist.txt}"
- - summary_txt:
- - meta:
+ ontologies: []
+ summary_txt:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -61,8 +66,9 @@ output:
type: file
description: Text file with summary mean depths per chromosome and regions
pattern: "*.{summary.txt}"
- - regions_txt:
- - meta:
+ ontologies: []
+ regions_txt:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -71,8 +77,9 @@ output:
type: file
description: Text file with region cumulative coverage distribution
pattern: "*.{region.dist.txt}"
- - per_base_d4:
- - meta:
+ ontologies: []
+ per_base_d4:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -81,8 +88,9 @@ output:
type: file
description: D4 file with per-base coverage
pattern: "*.{per-base.d4}"
- - per_base_bed:
- - meta:
+ ontologies: []
+ per_base_bed:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -91,8 +99,9 @@ output:
type: file
description: BED file with per-base coverage
pattern: "*.{per-base.bed.gz}"
- - per_base_csi:
- - meta:
+ ontologies: []
+ per_base_csi:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -101,8 +110,9 @@ output:
type: file
description: Index file for BED file with per-base coverage
pattern: "*.{per-base.bed.gz.csi}"
- - regions_bed:
- - meta:
+ ontologies: []
+ regions_bed:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -111,8 +121,9 @@ output:
type: file
description: BED file with per-region coverage
pattern: "*.{regions.bed.gz}"
- - regions_csi:
- - meta:
+ ontologies: []
+ regions_csi:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -121,8 +132,9 @@ output:
type: file
description: Index file for BED file with per-region coverage
pattern: "*.{regions.bed.gz.csi}"
- - quantized_bed:
- - meta:
+ ontologies: []
+ quantized_bed:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -131,8 +143,9 @@ output:
type: file
description: BED file with binned coverage
pattern: "*.{quantized.bed.gz}"
- - quantized_csi:
- - meta:
+ ontologies: []
+ quantized_csi:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -141,8 +154,9 @@ output:
type: file
description: Index file for BED file with binned coverage
pattern: "*.{quantized.bed.gz.csi}"
- - thresholds_bed:
- - meta:
+ ontologies: []
+ thresholds_bed:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -152,8 +166,9 @@ output:
description: BED file with the number of bases in each region that are covered
at or above each threshold
pattern: "*.{thresholds.bed.gz}"
- - thresholds_csi:
- - meta:
+ ontologies: []
+ thresholds_csi:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -162,11 +177,14 @@ output:
type: file
description: Index file for BED file with threshold coverage
pattern: "*.{thresholds.bed.gz.csi}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@joseespinosa"
- "@drpatelh"
diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap
index c604540b..a063dd9f 100644
--- a/modules/nf-core/mosdepth/tests/main.nf.test.snap
+++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap
@@ -39,7 +39,7 @@
]
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
[
@@ -222,15 +222,15 @@
]
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:33:16.953408231"
+ "timestamp": "2025-09-23T13:06:13.219131"
},
"homo_sapiens - cram, crai, bed": {
"content": [
@@ -260,7 +260,7 @@
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
[
@@ -289,7 +289,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -307,7 +307,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9"
+ "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4"
]
],
"8": [
@@ -340,7 +340,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -367,7 +367,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9"
+ "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4"
]
],
"regions_txt": [
@@ -395,15 +395,15 @@
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:32:50.160217828"
+ "timestamp": "2025-09-23T13:22:14.011309"
},
"homo_sapiens - bam, bai, [] - quantized": {
"content": [
@@ -433,7 +433,7 @@
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
@@ -456,7 +456,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -480,7 +480,7 @@
"id": "test",
"single_end": true
},
- "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0"
+ "test.quantized.bed.gz.csi:md5,c0a3176a59010639455a4aefb3f247ef"
]
],
"global_txt": [
@@ -507,7 +507,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -528,7 +528,7 @@
"id": "test",
"single_end": true
},
- "test.quantized.bed.gz.csi:md5,4f69e6ace50206a2768be66ded3a56f0"
+ "test.quantized.bed.gz.csi:md5,c0a3176a59010639455a4aefb3f247ef"
]
],
"regions_bed": [
@@ -556,15 +556,15 @@
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:33:01.164885111"
+ "timestamp": "2025-09-23T13:22:22.818082"
},
"homo_sapiens - bam, bai, bed": {
"content": [
@@ -594,7 +594,7 @@
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
[
@@ -623,7 +623,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -641,7 +641,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9"
+ "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4"
]
],
"8": [
@@ -674,7 +674,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -701,7 +701,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9"
+ "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4"
]
],
"regions_txt": [
@@ -729,15 +729,15 @@
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:32:39.071657456"
+ "timestamp": "2025-09-23T13:22:04.449943"
},
"homo_sapiens - bam, bai, [] - window": {
"content": [
@@ -767,7 +767,7 @@
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
[
@@ -796,7 +796,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -814,7 +814,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970"
+ "test.regions.bed.gz.csi:md5,17a2cbe22a948d7c004b90a1f28347a1"
]
],
"8": [
@@ -847,7 +847,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -874,7 +874,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,2a30bcb7f5c7632136b3efce24723970"
+ "test.regions.bed.gz.csi:md5,17a2cbe22a948d7c004b90a1f28347a1"
]
],
"regions_txt": [
@@ -902,15 +902,15 @@
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:32:55.631776118"
+ "timestamp": "2025-09-23T13:22:18.435089"
},
"homo_sapiens - bam, bai, []": {
"content": [
@@ -940,7 +940,7 @@
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
@@ -963,7 +963,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -1002,7 +1002,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -1039,15 +1039,15 @@
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:32:33.642125299"
+ "timestamp": "2025-09-23T13:21:59.785829"
},
"homo_sapiens - cram, crai, []": {
"content": [
@@ -1077,7 +1077,7 @@
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
@@ -1100,7 +1100,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -1139,7 +1139,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -1176,15 +1176,15 @@
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:32:44.704920941"
+ "timestamp": "2025-09-23T13:22:09.294766"
},
"homo_sapiens - bam, bai, bed - thresholds": {
"content": [
@@ -1222,11 +1222,11 @@
"id": "test",
"single_end": true
},
- "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055"
+ "test.thresholds.bed.gz.csi:md5,2c52ab89e7496af475de3cb2ca04c7b3"
]
],
"12": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
],
"2": [
[
@@ -1255,7 +1255,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"6": [
@@ -1273,7 +1273,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9"
+ "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4"
]
],
"8": [
@@ -1306,7 +1306,7 @@
"id": "test",
"single_end": true
},
- "test.per-base.bed.gz.csi:md5,6f322dc9250522a701bd68bd18fa8294"
+ "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f"
]
],
"per_base_d4": [
@@ -1333,7 +1333,7 @@
"id": "test",
"single_end": true
},
- "test.regions.bed.gz.csi:md5,e7df086f0a36e88ca231e143d43bd3f9"
+ "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4"
]
],
"regions_txt": [
@@ -1369,18 +1369,18 @@
"id": "test",
"single_end": true
},
- "test.thresholds.bed.gz.csi:md5,219414a0751185adb98d2235d83ea055"
+ "test.thresholds.bed.gz.csi:md5,2c52ab89e7496af475de3cb2ca04c7b3"
]
],
"versions": [
- "versions.yml:md5,87634e525fb18990cd98fe1080ad72ce"
+ "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-04-29T13:33:06.737266831"
+ "timestamp": "2025-09-23T13:22:27.300204"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/mosdepth/tests/quantized.config b/modules/nf-core/mosdepth/tests/quantized.config
index 63c55350..c208a4ce 100644
--- a/modules/nf-core/mosdepth/tests/quantized.config
+++ b/modules/nf-core/mosdepth/tests/quantized.config
@@ -1,3 +1,3 @@
process {
ext.args = "--quantize 0:1:4:100:200"
-}
\ No newline at end of file
+}
diff --git a/modules/nf-core/mosdepth/tests/tags.yml b/modules/nf-core/mosdepth/tests/tags.yml
deleted file mode 100644
index 5cd2e08e..00000000
--- a/modules/nf-core/mosdepth/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-mosdepth:
- - "modules/nf-core/mosdepth/**"
diff --git a/modules/nf-core/mosdepth/tests/threshold.config b/modules/nf-core/mosdepth/tests/threshold.config
index 9b014ddf..3302da60 100644
--- a/modules/nf-core/mosdepth/tests/threshold.config
+++ b/modules/nf-core/mosdepth/tests/threshold.config
@@ -1,3 +1,3 @@
process {
ext.args = "--thresholds 1,10,20,30"
-}
\ No newline at end of file
+}
diff --git a/modules/nf-core/mosdepth/tests/window.config b/modules/nf-core/mosdepth/tests/window.config
index 7a0f755c..7f0d08d6 100644
--- a/modules/nf-core/mosdepth/tests/window.config
+++ b/modules/nf-core/mosdepth/tests/window.config
@@ -1,3 +1,3 @@
process {
ext.args = "--by 100"
-}
\ No newline at end of file
+}
From 876c89b590b3b2bc8c8a01178795c8fbfbd0dc47 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:41:27 +0100
Subject: [PATCH 055/228] bump multiqc
---
modules.json | 2 +-
modules/nf-core/multiqc/environment.yml | 2 +-
modules/nf-core/multiqc/main.nf | 42 +++---
modules/nf-core/multiqc/meta.yml | 130 +++++++++++-------
.../multiqc/tests/custom_prefix.config | 5 +
modules/nf-core/multiqc/tests/main.nf.test | 32 ++++-
.../nf-core/multiqc/tests/main.nf.test.snap | 52 ++++---
7 files changed, 168 insertions(+), 97 deletions(-)
create mode 100644 modules/nf-core/multiqc/tests/custom_prefix.config
diff --git a/modules.json b/modules.json
index 5f6ae14d..c14f6122 100644
--- a/modules.json
+++ b/modules.json
@@ -64,7 +64,7 @@
},
"multiqc": {
"branch": "master",
- "git_sha": "471cf3ca1617271b9b6fea09ea2ebdee78b874de",
+ "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
"installed_by": ["modules"]
},
"picard/collecthsmetrics": {
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
index 812fc4c5..d02016a0 100644
--- a/modules/nf-core/multiqc/environment.yml
+++ b/modules/nf-core/multiqc/environment.yml
@@ -4,4 +4,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::multiqc=1.29
+ - bioconda::multiqc=1.32
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 0ac3c369..335afccc 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/modules/nf-core/multiqc/main.nf
@@ -3,11 +3,11 @@ process MULTIQC {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/multiqc:1.29--pyhdfd78af_0' :
- 'biocontainers/multiqc:1.29--pyhdfd78af_0' }"
+ 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/8c/8c6c120d559d7ee04c7442b61ad7cf5a9e8970be5feefb37d68eeaa60c1034eb/data' :
+ 'community.wave.seqera.io/library/multiqc:1.32--d58f60e4deb769bf' }"
input:
- path multiqc_files, stageAs: "?/*"
+ path multiqc_files, stageAs: "?/*"
path(multiqc_config)
path(extra_multiqc_config)
path(multiqc_logo)
@@ -15,10 +15,10 @@ process MULTIQC {
path(sample_names)
output:
- path "*multiqc_report.html", emit: report
- path "*_data" , emit: data
- path "*_plots" , optional:true, emit: plots
- path "versions.yml" , emit: versions
+ 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"'), topic: versions, emit: versions_multiqc
when:
task.ext.when == null || task.ext.when
@@ -26,38 +26,30 @@ 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 ? "--config ${multiqc_config}" : ''
+ def extra_config = extra_multiqc_config ? "--config ${extra_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}" : ''
"""
multiqc \\
--force \\
- $args \\
- $config \\
- $prefix \\
- $extra_config \\
- $logo \\
- $replace \\
- $samples \\
+ ${args} \\
+ ${config} \\
+ ${prefix} \\
+ ${extra_config} \\
+ ${logo} \\
+ ${replace} \\
+ ${samples} \\
.
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" )
- END_VERSIONS
"""
stub:
"""
mkdir multiqc_data
+ touch multiqc_data/.stub
mkdir multiqc_plots
touch multiqc_report.html
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- multiqc: \$( multiqc --version | sed -e "s/multiqc, version //g" )
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml
index b16c1879..4a908611 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
@@ -15,57 +15,85 @@ tools:
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
- - - multiqc_config:
- type: file
- description: Optional config yml for MultiQC
- pattern: "*.{yml,yaml}"
- - - extra_multiqc_config:
- type: file
- description: Second optional config yml for MultiQC. Will override common sections
- in multiqc_config.
- pattern: "*.{yml,yaml}"
- - - multiqc_logo:
- type: file
- description: Optional logo file for MultiQC
- pattern: "*.{png}"
- - - replace_names:
+ - 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":
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}"
- - - sample_names:
+ description: MultiQC report file
+ pattern: ".html"
+ ontologies: []
+ data:
+ - "*_data":
+ type: directory
+ description: MultiQC data dir
+ pattern: "multiqc_data"
+ plots:
+ - "*_plots":
type: file
- description: |
- Optional TSV file with headers, passed to the MultiQC --sample_names
- argument.
- pattern: "*.{tsv}"
-output:
- - report:
- - "*multiqc_report.html":
- type: file
- description: MultiQC report file
- pattern: "multiqc_report.html"
- - data:
- - "*_data":
- type: directory
- description: MultiQC data dir
- pattern: "multiqc_data"
- - plots:
- - "*_plots":
- type: file
- description: Plots created by MultiQC
- pattern: "*_data"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ description: Plots created by MultiQC
+ pattern: "*_data"
+ ontologies: []
+ versions_multiqc:
+ - - ${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: string
+ description: The command used to generate the version of the tool
+topics:
+ 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: string
+ description: The command used to generate the version of the tool
authors:
- "@abhi18av"
- "@bunop"
diff --git a/modules/nf-core/multiqc/tests/custom_prefix.config b/modules/nf-core/multiqc/tests/custom_prefix.config
new file mode 100644
index 00000000..b30b1358
--- /dev/null
+++ b/modules/nf-core/multiqc/tests/custom_prefix.config
@@ -0,0 +1,5 @@
+process {
+ withName: 'MULTIQC' {
+ ext.prefix = "custom_prefix"
+ }
+}
diff --git a/modules/nf-core/multiqc/tests/main.nf.test b/modules/nf-core/multiqc/tests/main.nf.test
index 33316a7d..d1ae8b06 100644
--- a/modules/nf-core/multiqc/tests/main.nf.test
+++ b/modules/nf-core/multiqc/tests/main.nf.test
@@ -30,7 +30,33 @@ nextflow_process {
{ assert process.success },
{ assert process.out.report[0] ==~ ".*/multiqc_report.html" },
{ assert process.out.data[0] ==~ ".*/multiqc_data" },
- { assert snapshot(process.out.versions).match("multiqc_versions_single") }
+ { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions")}).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 single-end [fastqc] - custom prefix") {
+ config "./custom_prefix.config"
+
+ 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] = []
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert process.out.report[0] ==~ ".*/custom_prefix.html" },
+ { assert process.out.data[0] ==~ ".*/custom_prefix_data" }
)
}
@@ -56,7 +82,7 @@ nextflow_process {
{ assert process.success },
{ assert process.out.report[0] ==~ ".*/multiqc_report.html" },
{ assert process.out.data[0] ==~ ".*/multiqc_data" },
- { assert snapshot(process.out.versions).match("multiqc_versions_config") }
+ { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions")}).match() }
)
}
}
@@ -84,7 +110,7 @@ nextflow_process {
{ 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.versions ).match("multiqc_stub") }
+ process.out.findAll { key, val -> key.startsWith("versions")} ).match() }
)
}
diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap
index 25caea81..f76049d3 100644
--- a/modules/nf-core/multiqc/tests/main.nf.test.snap
+++ b/modules/nf-core/multiqc/tests/main.nf.test.snap
@@ -1,41 +1,61 @@
{
- "multiqc_versions_single": {
+ "sarscov2 single-end [fastqc]": {
"content": [
- [
- "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1"
- ]
+ {
+ "versions_multiqc": [
+ [
+ "MULTIQC",
+ "multiqc",
+ "1.32"
+ ]
+ ]
+ }
],
"meta": {
"nf-test": "0.9.2",
- "nextflow": "25.04.2"
+ "nextflow": "25.04.6"
},
- "timestamp": "2025-06-03T09:17:40.895950399"
+ "timestamp": "2025-10-28T15:27:59.813370216"
},
- "multiqc_stub": {
+ "sarscov2 single-end [fastqc] - stub": {
"content": [
[
"multiqc_report.html",
"multiqc_data",
"multiqc_plots",
- "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1"
+ {
+ "versions_multiqc": [
+ [
+ "MULTIQC",
+ "multiqc",
+ "1.32"
+ ]
+ ]
+ }
]
],
"meta": {
"nf-test": "0.9.2",
- "nextflow": "25.04.2"
+ "nextflow": "25.04.6"
},
- "timestamp": "2025-06-03T09:18:16.875131107"
+ "timestamp": "2025-10-28T15:30:48.963962021"
},
- "multiqc_versions_config": {
+ "sarscov2 single-end [fastqc] [config]": {
"content": [
- [
- "versions.yml:md5,c1fe644a37468f6dae548d98bc72c2c1"
- ]
+ {
+ "versions_multiqc": [
+ [
+ "MULTIQC",
+ "multiqc",
+ "1.32"
+ ]
+ ]
+ }
],
"meta": {
"nf-test": "0.9.2",
- "nextflow": "25.04.2"
+ "nextflow": "25.04.6"
},
- "timestamp": "2025-06-03T09:18:03.624717769"
+ "timestamp": "2025-10-28T15:29:30.664969334"
}
}
\ No newline at end of file
From 3833af420b1d6e338b515ca0b2e5df0ead879cdd Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:43:09 +0100
Subject: [PATCH 056/228] bump picard modules
---
modules.json | 6 +-
.../picard/collecthsmetrics/environment.yml | 5 +-
.../nf-core/picard/collecthsmetrics/main.nf | 10 +-
.../nf-core/picard/collecthsmetrics/meta.yml | 44 +++--
.../collecthsmetrics/tests/main.nf.test | 45 ++++-
.../collecthsmetrics/tests/main.nf.test.snap | 156 +++++++++++++++---
.../picard/collecthsmetrics/tests/tags.yml | 2 -
.../collectmultiplemetrics/environment.yml | 5 +-
.../picard/collectmultiplemetrics/main.nf | 4 +-
.../picard/collectmultiplemetrics/meta.yml | 26 ++-
.../tests/main.nf.test.snap | 24 +--
.../picard/collectwgsmetrics/environment.yml | 5 +-
.../nf-core/picard/collectwgsmetrics/main.nf | 4 +-
.../nf-core/picard/collectwgsmetrics/meta.yml | 30 ++--
.../collectwgsmetrics/tests/main.nf.test.snap | 16 +-
15 files changed, 292 insertions(+), 90 deletions(-)
delete mode 100644 modules/nf-core/picard/collecthsmetrics/tests/tags.yml
diff --git a/modules.json b/modules.json
index c14f6122..54019971 100644
--- a/modules.json
+++ b/modules.json
@@ -69,19 +69,19 @@
},
"picard/collecthsmetrics": {
"branch": "master",
- "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358",
+ "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff"
},
"picard/collectmultiplemetrics": {
"branch": "master",
- "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358",
+ "git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff"
},
"picard/collectwgsmetrics": {
"branch": "master",
- "git_sha": "49f4e50534fe4b64101e62ea41d5dc43b1324358",
+ "git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
diff --git a/modules/nf-core/picard/collecthsmetrics/environment.yml b/modules/nf-core/picard/collecthsmetrics/environment.yml
index 1d715d56..b4ac4fe0 100644
--- a/modules/nf-core/picard/collecthsmetrics/environment.yml
+++ b/modules/nf-core/picard/collecthsmetrics/environment.yml
@@ -1,5 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::picard=3.3.0
+ # renovate: datasource=conda depName=bioconda/picard
+ - bioconda::picard=3.4.0
diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf
index 6eb9aa0c..3a51548f 100644
--- a/modules/nf-core/picard/collecthsmetrics/main.nf
+++ b/modules/nf-core/picard/collecthsmetrics/main.nf
@@ -4,8 +4,8 @@ process PICARD_COLLECTHSMETRICS {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' :
- 'biocontainers/picard:3.3.0--hdfd78af_0' }"
+ '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)
@@ -20,7 +20,7 @@ process PICARD_COLLECTHSMETRICS {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
- def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
+ def reference = ref ? "--REFERENCE_SEQUENCE ${ref}" : ""
def avail_mem = 3072
if (!task.memory) {
@@ -33,14 +33,14 @@ process PICARD_COLLECTHSMETRICS {
def bait_intervallist_cmd = ""
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 ."
+ bait_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${bait_intervals} --OUTPUT ${bait_interval_list} --SEQUENCE_DICTIONARY ${ref_dict} --TMP_DIR ."
}
def target_interval_list = target_intervals
def target_intervallist_cmd = ""
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 ."
+ target_intervallist_cmd = "picard -Xmx${avail_mem}M BedToIntervalList --INPUT ${target_intervals} --OUTPUT ${target_interval_list} --SEQUENCE_DICTIONARY ${ref_dict} --TMP_DIR ."
}
diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml
index ea6deda3..511ae959 100644
--- a/modules/nf-core/picard/collecthsmetrics/meta.yml
+++ b/modules/nf-core/picard/collecthsmetrics/meta.yml
@@ -28,51 +28,68 @@ input:
type: file
description: An aligned BAM/CRAM/SAM file
pattern: "*.{bam,cram,sam}"
+ ontologies: []
- bai:
type: file
description: Optional aligned BAM/CRAM/SAM file index
pattern: "*.{bai,crai,sai}"
+ ontologies: []
- bait_intervals:
type: file
description: An interval file that contains the locations of the baits used.
pattern: "*.{interval_list,bed,bed.gz}"
+ ontologies: []
- target_intervals:
type: file
description: An interval file that contains the locations of the targets.
pattern: "*.{interval_list,bed,bed.gz}"
+ ontologies: []
- - meta2:
type: map
description: |
Groovy Map containing reference information
e.g. [ id:'genome' ]
- - fasta:
+ - ref:
type: file
description: |
A reference file to calculate dropout metrics measuring reduced representation of reads.
Optional input.
- pattern: "*.{fa,fasta,fna}"
+ pattern: "*.{fa,fa.gz,fasta,fasta.gz,fna,fna.gz}"
+ ontologies: []
- - meta3:
type: map
description: |
Groovy Map containing reference information
e.g. [ id:'genome' ]
- - fai:
+ - ref_fai:
type: file
- description: Index of FASTA file. Only needed when fasta is supplied.
+ description: Index of reference file. Only needed when reference is supplied.
pattern: "*.fai"
+ ontologies: []
- - meta4:
type: map
description: |
Groovy Map containing reference information
e.g. [ id:'genome' ]
- - dict:
+ - ref_dict:
type: file
description: Sequence dictionary of FASTA file. Only needed when bed interval
lists are supplied.
pattern: "*.dict"
+ ontologies: []
+ - - meta5:
+ type: map
+ description: |
+ Groovy Map containing reference information
+ e.g. [ id:'genome' ]
+ - ref_gzi:
+ type: file
+ description: Index of reference file. Only needed when gzipped reference is supplied.
+ pattern: "*.gzi"
+ ontologies: []
output:
- - metrics:
- - meta:
+ metrics:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -81,11 +98,14 @@ output:
type: file
description: Alignment metrics files generated by picard
pattern: "*_{metrics}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@projectoriented"
- "@matthdsm"
diff --git a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test
index 3bbbd8cf..fe40e7b0 100644
--- a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test
+++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test
@@ -24,6 +24,45 @@ nextflow_process {
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] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)]
+ input[4] = [[:],[]]
+ """
+ }
+ }
+
+ then {
+ def size = path(process.out.metrics[0][1]).size()
+ def lines = path(process.out.metrics[0][1]).readLines()[0..100]
+ lines.remove(3) // remove timestamp
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ file(process.out.metrics[0][1]).name,
+ size,
+ lines,
+ process.out.versions
+ ).match()
+ }
+ )
+ }
+
+ }
+
+ test("sarscov2 - bam - gzippedfa") {
+
+ 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),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/baits.interval_list', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/picard/targets.interval_list', checkIfExists: true)
+ ]
+ input[1] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz', checkIfExists: true)]
+ input[2] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz.fai', checkIfExists: true)]
+ input[3] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)]
+ input[4] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.gz.gzi', checkIfExists: true)]
"""
}
}
@@ -63,6 +102,7 @@ nextflow_process {
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] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)]
+ input[4] = [[:],[]]
"""
}
}
@@ -91,6 +131,7 @@ nextflow_process {
input[1] = [[:],[]]
input[2] = [[:],[]]
input[3] = [[:],[]]
+ input[4] = [[:],[]]
"""
}
}
@@ -129,6 +170,7 @@ nextflow_process {
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] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)]
+ input[4] = [[:],[]]
"""
}
}
@@ -167,6 +209,7 @@ nextflow_process {
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] = [[id:'genome'], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.dict', checkIfExists: true)]
+ input[4] = [[:],[]]
"""
}
}
@@ -188,4 +231,4 @@ nextflow_process {
}
}
-}
\ No newline at end of file
+}
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 4d21710a..11b0f7c5 100644
--- a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap
+++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap
@@ -106,26 +106,142 @@
"89\t0\t0"
],
[
- "versions.yml:md5,bdfc7b655683e7b66f68e894c999805e"
+ "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:51:55.291163084"
+ "timestamp": "2025-09-15T10:37:59.62099935"
+ },
+ "sarscov2 - bam - gzippedfa": {
+ "content": [
+ "test.CollectHsMetrics.coverage_metrics",
+ 3601,
+ [
+ "## htsjdk.samtools.metrics.StringHeader",
+ "# CollectHsMetrics --BAIT_INTERVALS baits/baits.interval_list --TARGET_INTERVALS targets/targets.interval_list --INPUT test.paired_end.sorted.bam --OUTPUT test.CollectHsMetrics.coverage_metrics --REFERENCE_SEQUENCE genome.fasta.gz --METRIC_ACCUMULATION_LEVEL ALL_READS --NEAR_DISTANCE 250 --MINIMUM_MAPPING_QUALITY 20 --MINIMUM_BASE_QUALITY 20 --CLIP_OVERLAPPING_READS true --INCLUDE_INDELS false --COVERAGE_CAP 200 --SAMPLE_SIZE 10000 --ALLELE_FRACTION 0.001 --ALLELE_FRACTION 0.005 --ALLELE_FRACTION 0.01 --ALLELE_FRACTION 0.02 --ALLELE_FRACTION 0.05 --ALLELE_FRACTION 0.1 --ALLELE_FRACTION 0.2 --ALLELE_FRACTION 0.3 --ALLELE_FRACTION 0.5 --VERBOSITY INFO --QUIET false --VALIDATION_STRINGENCY STRICT --COMPRESSION_LEVEL 5 --MAX_RECORDS_IN_RAM 500000 --CREATE_INDEX false --CREATE_MD5_FILE false --help false --version false --showHidden false --USE_JDK_DEFLATER false --USE_JDK_INFLATER false",
+ "## htsjdk.samtools.metrics.StringHeader",
+ "",
+ "## METRICS CLASS\tpicard.analysis.directed.HsMetrics",
+ "BAIT_SET\tBAIT_TERRITORY\tBAIT_DESIGN_EFFICIENCY\tON_BAIT_BASES\tNEAR_BAIT_BASES\tOFF_BAIT_BASES\tPCT_SELECTED_BASES\tPCT_OFF_BAIT\tON_BAIT_VS_SELECTED\tMEAN_BAIT_COVERAGE\tPCT_USABLE_BASES_ON_BAIT\tPCT_USABLE_BASES_ON_TARGET\tFOLD_ENRICHMENT\tHS_LIBRARY_SIZE\tHS_PENALTY_10X\tHS_PENALTY_20X\tHS_PENALTY_30X\tHS_PENALTY_40X\tHS_PENALTY_50X\tHS_PENALTY_100X\tTARGET_TERRITORY\tGENOME_SIZE\tTOTAL_READS\tPF_READS\tPF_BASES\tPF_UNIQUE_READS\tPF_UQ_READS_ALIGNED\tPF_BASES_ALIGNED\tPF_UQ_BASES_ALIGNED\tON_TARGET_BASES\tPCT_PF_READS\tPCT_PF_UQ_READS\tPCT_PF_UQ_READS_ALIGNED\tMEAN_TARGET_COVERAGE\tMEDIAN_TARGET_COVERAGE\tMAX_TARGET_COVERAGE\tMIN_TARGET_COVERAGE\tZERO_CVG_TARGETS_PCT\tPCT_EXC_DUPE\tPCT_EXC_ADAPTER\tPCT_EXC_MAPQ\tPCT_EXC_BASEQ\tPCT_EXC_OVERLAP\tPCT_EXC_OFF_TARGET\tFOLD_80_BASE_PENALTY\tPCT_TARGET_BASES_1X\tPCT_TARGET_BASES_2X\tPCT_TARGET_BASES_10X\tPCT_TARGET_BASES_20X\tPCT_TARGET_BASES_30X\tPCT_TARGET_BASES_40X\tPCT_TARGET_BASES_50X\tPCT_TARGET_BASES_100X\tPCT_TARGET_BASES_250X\tPCT_TARGET_BASES_500X\tPCT_TARGET_BASES_1000X\tPCT_TARGET_BASES_2500X\tPCT_TARGET_BASES_5000X\tPCT_TARGET_BASES_10000X\tPCT_TARGET_BASES_25000X\tPCT_TARGET_BASES_50000X\tPCT_TARGET_BASES_100000X\tAT_DROPOUT\tGC_DROPOUT\tHET_SNP_SENSITIVITY\tHET_SNP_Q\tSAMPLE\tLIBRARY\tREAD_GROUP",
+ "baits\t158\t0.594937\t725\t3985\t22691\t0.171892\t0.828108\t0.153928\t4.588608\t0.026225\t0.000181\t4.995204\t\t0\t0\t0\t0\t0\t0\t94\t29829\t200\t200\t27645\t200\t197\t27401\t27401\t5\t1\t1\t0.985\t0.053191\t0\t1\t0\t0.75\t0\t0\t0.005438\t0.054487\t0.259516\t0.680377\t?\t0.053191\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t0\t76.595745\t23.404255\t0.015734\t0\t\t\t",
+ "",
+ "## HISTOGRAM\tjava.lang.Integer",
+ "coverage_or_base_quality\thigh_quality_coverage_count\tunfiltered_baseq_count",
+ "0\t89\t0",
+ "1\t5\t0",
+ "2\t0\t0",
+ "3\t0\t0",
+ "4\t0\t0",
+ "5\t0\t0",
+ "6\t0\t0",
+ "7\t0\t0",
+ "8\t0\t0",
+ "9\t0\t0",
+ "10\t0\t0",
+ "11\t0\t0",
+ "12\t0\t0",
+ "13\t0\t0",
+ "14\t0\t5",
+ "15\t0\t0",
+ "16\t0\t0",
+ "17\t0\t0",
+ "18\t0\t0",
+ "19\t0\t0",
+ "20\t0\t0",
+ "21\t0\t1",
+ "22\t0\t0",
+ "23\t0\t0",
+ "24\t0\t0",
+ "25\t0\t0",
+ "26\t0\t0",
+ "27\t0\t0",
+ "28\t0\t0",
+ "29\t0\t0",
+ "30\t0\t0",
+ "31\t0\t0",
+ "32\t0\t1",
+ "33\t0\t0",
+ "34\t0\t0",
+ "35\t0\t0",
+ "36\t0\t3",
+ "37\t0\t0",
+ "38\t0\t0",
+ "39\t0\t0",
+ "40\t0\t0",
+ "41\t0\t0",
+ "42\t0\t0",
+ "43\t0\t0",
+ "44\t0\t0",
+ "45\t0\t0",
+ "46\t0\t0",
+ "47\t0\t0",
+ "48\t0\t0",
+ "49\t0\t0",
+ "50\t0\t0",
+ "51\t0\t0",
+ "52\t0\t0",
+ "53\t0\t0",
+ "54\t0\t0",
+ "55\t0\t0",
+ "56\t0\t0",
+ "57\t0\t0",
+ "58\t0\t0",
+ "59\t0\t0",
+ "60\t0\t0",
+ "61\t0\t0",
+ "62\t0\t0",
+ "63\t0\t0",
+ "64\t0\t0",
+ "65\t0\t0",
+ "66\t0\t0",
+ "67\t0\t0",
+ "68\t0\t0",
+ "69\t0\t0",
+ "70\t0\t0",
+ "71\t0\t0",
+ "72\t0\t0",
+ "73\t0\t0",
+ "74\t0\t0",
+ "75\t0\t0",
+ "76\t0\t0",
+ "77\t0\t0",
+ "78\t0\t0",
+ "79\t0\t0",
+ "80\t0\t0",
+ "81\t0\t0",
+ "82\t0\t0",
+ "83\t0\t0",
+ "84\t0\t0",
+ "85\t0\t0",
+ "86\t0\t0",
+ "87\t0\t0",
+ "88\t0\t0",
+ "89\t0\t0"
+ ],
+ [
+ "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
+ ]
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
+ },
+ "timestamp": "2025-09-15T10:37:32.831030701"
},
"versions": {
"content": [
[
- "versions.yml:md5,bdfc7b655683e7b66f68e894c999805e"
+ "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:51:30.748857589"
+ "timestamp": "2025-09-15T10:37:42.492104283"
},
"sarscov2 - bam - samebed": {
"content": [
@@ -234,14 +350,14 @@
"89\t0\t0"
],
[
- "versions.yml:md5,bdfc7b655683e7b66f68e894c999805e"
+ "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:52:43.803456585"
+ "timestamp": "2025-09-15T10:38:39.302597954"
},
"sarscov2 - bam": {
"content": [
@@ -350,14 +466,14 @@
"89\t0\t0"
],
[
- "versions.yml:md5,bdfc7b655683e7b66f68e894c999805e"
+ "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:51:01.881343611"
+ "timestamp": "2025-09-15T10:37:15.861292725"
},
"sarscov2 - bam - bed": {
"content": [
@@ -466,13 +582,13 @@
"89\t0\t0"
],
[
- "versions.yml:md5,bdfc7b655683e7b66f68e894c999805e"
+ "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:52:22.830749735"
+ "timestamp": "2025-09-15T10:38:18.912909604"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/picard/collecthsmetrics/tests/tags.yml b/modules/nf-core/picard/collecthsmetrics/tests/tags.yml
deleted file mode 100644
index b353f95e..00000000
--- a/modules/nf-core/picard/collecthsmetrics/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-picard/collecthsmetrics:
- - "modules/nf-core/picard/collecthsmetrics/**"
diff --git a/modules/nf-core/picard/collectmultiplemetrics/environment.yml b/modules/nf-core/picard/collectmultiplemetrics/environment.yml
index 1d715d56..b4ac4fe0 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/environment.yml
+++ b/modules/nf-core/picard/collectmultiplemetrics/environment.yml
@@ -1,5 +1,8 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::picard=3.3.0
+ # renovate: datasource=conda depName=bioconda/picard
+ - bioconda::picard=3.4.0
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index de390df1..e4d74998 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -4,8 +4,8 @@ process PICARD_COLLECTMULTIPLEMETRICS {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' :
- 'biocontainers/picard:3.3.0--hdfd78af_0' }"
+ '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)
diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml
index 2b7981ac..3f0bf610 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml
+++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml
@@ -26,10 +26,12 @@ input:
type: file
description: SAM/BAM/CRAM file
pattern: "*.{sam,bam,cram}"
+ ontologies: []
- bai:
type: file
description: Optional SAM/BAM/CRAM file index
pattern: "*.{sai,bai,crai}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -38,6 +40,7 @@ input:
- fasta:
type: file
description: Genome fasta file
+ ontologies: []
- - meta3:
type: map
description: |
@@ -47,9 +50,10 @@ input:
type: file
description: Index of FASTA file. Only needed when fasta is supplied.
pattern: "*.fai"
+ ontologies: []
output:
- - metrics:
- - meta:
+ metrics:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -58,8 +62,9 @@ output:
type: file
description: Alignment metrics files generated by picard
pattern: "*_{metrics}"
- - pdf:
- - meta:
+ ontologies: []
+ pdf:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -68,11 +73,14 @@ output:
type: file
description: PDF plots of metrics
pattern: "*.{pdf}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@drpatelh"
maintainers:
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 a76a3237..5a1de114 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap
+++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap
@@ -16,14 +16,14 @@
"test.CollectMultipleMetrics.read_length_histogram.pdf"
],
[
- "versions.yml:md5,791db2719d57a997f8253b3ba97d62d7"
+ "versions.yml:md5,aca7ca0dc0012ee97698236828ba242a"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T11:05:12.591021247"
+ "timestamp": "2025-09-15T10:41:26.126816186"
},
"test-picard-collectmultiplemetrics-cram": {
"content": [
@@ -42,14 +42,14 @@
"test.CollectMultipleMetrics.read_length_histogram.pdf"
],
[
- "versions.yml:md5,791db2719d57a997f8253b3ba97d62d7"
+ "versions.yml:md5,aca7ca0dc0012ee97698236828ba242a"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T11:06:08.499320579"
+ "timestamp": "2025-09-15T10:41:50.933556225"
},
"test-picard-collectmultiplemetrics-nofasta": {
"content": [
@@ -68,13 +68,13 @@
"test.CollectMultipleMetrics.read_length_histogram.pdf"
],
[
- "versions.yml:md5,791db2719d57a997f8253b3ba97d62d7"
+ "versions.yml:md5,aca7ca0dc0012ee97698236828ba242a"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T11:05:42.117033611"
+ "timestamp": "2025-09-15T10:41:38.213084333"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/picard/collectwgsmetrics/environment.yml b/modules/nf-core/picard/collectwgsmetrics/environment.yml
index 13265842..186d4a4b 100644
--- a/modules/nf-core/picard/collectwgsmetrics/environment.yml
+++ b/modules/nf-core/picard/collectwgsmetrics/environment.yml
@@ -1,6 +1,9 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::picard=3.3.0
+ # renovate: datasource=conda depName=bioconda/picard
+ - bioconda::picard=3.4.0
- conda-forge::r-base=4.4.1
diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf
index 468e1c8a..cd4a7711 100644
--- a/modules/nf-core/picard/collectwgsmetrics/main.nf
+++ b/modules/nf-core/picard/collectwgsmetrics/main.nf
@@ -4,8 +4,8 @@ process PICARD_COLLECTWGSMETRICS {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/picard:3.3.0--hdfd78af_0' :
- 'biocontainers/picard:3.3.0--hdfd78af_0' }"
+ '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)
diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml
index bb748080..a27e0a88 100644
--- a/modules/nf-core/picard/collectwgsmetrics/meta.yml
+++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml
@@ -26,10 +26,12 @@ input:
type: file
description: Aligned reads file
pattern: "*.{bam, cram}"
+ ontologies: []
- bai:
type: file
description: (Optional) Aligned reads file index
pattern: "*.{bai,crai}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -39,6 +41,7 @@ input:
type: file
description: Genome fasta file
pattern: "*.{fa,fasta,fna}"
+ ontologies: []
- - meta3:
type: map
description: |
@@ -48,13 +51,15 @@ input:
type: file
description: Genome fasta file index
pattern: "*.{fai}"
- - - intervallist:
- type: file
- description: Picard Interval List. Defines which contigs to include. Can be
- generated from a BED file with GATK BedToIntervalList.
+ ontologies: []
+ - intervallist:
+ type: file
+ description: Picard Interval List. Defines which contigs to include. Can be generated
+ from a BED file with GATK BedToIntervalList.
+ ontologies: []
output:
- - metrics:
- - meta:
+ metrics:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -63,11 +68,14 @@ output:
type: file
description: Alignment metrics files generated by picard
pattern: "*_{metrics}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@drpatelh"
- "@flowuenne"
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 1958fcde..d944d96b 100644
--- a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap
+++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap
@@ -3,26 +3,26 @@
"content": [
true,
[
- "versions.yml:md5,9927db69fdd55176be5cdbd427d000c2"
+ "versions.yml:md5,0fa1034c5831e54d4534e6052a8d6b61"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:15:18.13771243"
+ "timestamp": "2025-09-15T10:45:19.40801445"
},
"test-picard-collectwgsmetrics": {
"content": [
true,
[
- "versions.yml:md5,9927db69fdd55176be5cdbd427d000c2"
+ "versions.yml:md5,0fa1034c5831e54d4534e6052a8d6b61"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-10-18T10:14:57.786056996"
+ "timestamp": "2025-09-15T10:44:57.689335695"
}
}
\ No newline at end of file
From 4e99a19e42dab232842a5969f38a3f8a78e4aac2 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:48:09 +0100
Subject: [PATCH 057/228] bump samtools modules
---
modules.json | 18 +-
modules/nf-core/samtools/cat/environment.yml | 6 +-
modules/nf-core/samtools/cat/main.nf | 4 +-
modules/nf-core/samtools/cat/meta.yml | 23 +-
.../nf-core/samtools/cat/samtools-cat.diff | 3 +-
.../samtools/cat/tests/main.nf.test.snap | 16 +-
modules/nf-core/samtools/cat/tests/tags.yml | 2 -
.../nf-core/samtools/convert/environment.yml | 6 +-
modules/nf-core/samtools/convert/main.nf | 6 +-
modules/nf-core/samtools/convert/meta.yml | 36 +-
.../samtools/convert/tests/main.nf.test | 2 +-
.../samtools/convert/tests/main.nf.test.snap | 30 +-
.../nf-core/samtools/convert/tests/tags.yml | 2 -
.../nf-core/samtools/coverage/environment.yml | 6 +-
modules/nf-core/samtools/coverage/main.nf | 11 +-
modules/nf-core/samtools/coverage/meta.yml | 21 +-
.../samtools/coverage/tests/main.nf.test | 67 +++-
.../samtools/coverage/tests/main.nf.test.snap | 30 +-
.../nf-core/samtools/coverage/tests/tags.yml | 2 -
.../nf-core/samtools/flagstat/environment.yml | 6 +-
modules/nf-core/samtools/flagstat/main.nf | 18 +-
modules/nf-core/samtools/flagstat/meta.yml | 19 +-
.../samtools/flagstat/tests/main.nf.test.snap | 24 +-
.../nf-core/samtools/flagstat/tests/tags.yml | 2 -
.../nf-core/samtools/idxstats/environment.yml | 6 +-
modules/nf-core/samtools/idxstats/main.nf | 5 +-
modules/nf-core/samtools/idxstats/meta.yml | 19 +-
.../samtools/idxstats/tests/main.nf.test.snap | 20 +-
.../nf-core/samtools/idxstats/tests/tags.yml | 2 -
.../nf-core/samtools/import/environment.yml | 6 +-
modules/nf-core/samtools/import/main.nf | 4 +-
modules/nf-core/samtools/import/meta.yml | 29 +-
.../nf-core/samtools/import/tests/tags.yml | 2 -
.../nf-core/samtools/sormadup/environment.yml | 6 +-
modules/nf-core/samtools/sormadup/main.nf | 4 +-
modules/nf-core/samtools/sormadup/meta.yml | 39 +-
.../samtools/sormadup/tests/cram.config | 2 +-
.../samtools/sormadup/tests/main.nf.test.snap | 28 +-
.../nf-core/samtools/sormadup/tests/tags.yml | 2 -
modules/nf-core/samtools/sort/environment.yml | 6 +-
modules/nf-core/samtools/sort/main.nf | 67 ++--
modules/nf-core/samtools/sort/meta.yml | 81 +++-
.../nf-core/samtools/sort/tests/main.nf.test | 156 +++++++-
.../samtools/sort/tests/main.nf.test.snap | 371 +++++++++---------
.../samtools/sort/tests/nextflow.config | 1 -
modules/nf-core/samtools/sort/tests/tags.yml | 3 -
.../nf-core/samtools/stats/environment.yml | 6 +-
modules/nf-core/samtools/stats/main.nf | 16 +-
modules/nf-core/samtools/stats/meta.yml | 35 +-
.../samtools/stats/tests/main.nf.test.snap | 88 +++--
modules/nf-core/samtools/stats/tests/tags.yml | 2 -
51 files changed, 867 insertions(+), 499 deletions(-)
delete mode 100644 modules/nf-core/samtools/cat/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/convert/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/coverage/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/flagstat/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/idxstats/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/import/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/sormadup/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/sort/tests/tags.yml
delete mode 100644 modules/nf-core/samtools/stats/tests/tags.yml
diff --git a/modules.json b/modules.json
index 54019971..7d0d7bc8 100644
--- a/modules.json
+++ b/modules.json
@@ -87,52 +87,52 @@
},
"samtools/cat": {
"branch": "master",
- "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
+ "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/cat/samtools-cat.diff"
},
"samtools/convert": {
"branch": "master",
- "git_sha": "b13f07be4c508d6ff6312d354d09f2493243e208",
+ "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/convert/samtools-convert.diff"
},
"samtools/coverage": {
"branch": "master",
- "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540",
+ "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
"samtools/flagstat": {
"branch": "master",
- "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540",
+ "git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45",
"installed_by": ["modules"]
},
"samtools/idxstats": {
"branch": "master",
- "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540",
+ "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
"installed_by": ["modules"]
},
"samtools/import": {
"branch": "master",
- "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540",
+ "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
"installed_by": ["modules"]
},
"samtools/sormadup": {
"branch": "master",
- "git_sha": "38f3b0200093498b70ac2d63a83eac5642e3c873",
+ "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sormadup/samtools-sormadup.diff"
},
"samtools/sort": {
"branch": "master",
- "git_sha": "b7800db9b069ed505db3f9d91b8c72faea9be17b",
+ "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sort/samtools-sort.diff"
},
"samtools/stats": {
"branch": "master",
- "git_sha": "2d20463181b1c38981a02e90d3084b5f9fa8d540",
+ "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/stats/samtools-stats.diff"
},
diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/cat/environment.yml
+++ b/modules/nf-core/samtools/cat/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf
index 61349e59..d200e501 100644
--- a/modules/nf-core/samtools/cat/main.nf
+++ b/modules/nf-core/samtools/cat/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_CAT {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(input_files, stageAs: "?/*")
diff --git a/modules/nf-core/samtools/cat/meta.yml b/modules/nf-core/samtools/cat/meta.yml
index dfb0f78c..a2ac0e21 100644
--- a/modules/nf-core/samtools/cat/meta.yml
+++ b/modules/nf-core/samtools/cat/meta.yml
@@ -27,9 +27,10 @@ input:
type: file
description: BAM/CRAM files
pattern: "*.{bam,cram}"
+ ontologies: []
output:
- - bam:
- - meta:
+ bam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -38,8 +39,9 @@ output:
type: file
description: Concatenated BAM file
pattern: "*.{bam}"
- - cram:
- - meta:
+ ontologies: []
+ cram:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -48,11 +50,14 @@ output:
type: file
description: Concatenated CRAM file
pattern: "*.{cram}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/samtools/cat/samtools-cat.diff b/modules/nf-core/samtools/cat/samtools-cat.diff
index 71c58b5c..5b6918b7 100644
--- a/modules/nf-core/samtools/cat/samtools-cat.diff
+++ b/modules/nf-core/samtools/cat/samtools-cat.diff
@@ -1,4 +1,4 @@
-Changes in module 'nf-core/samtools/cat'
+Changes in component 'nf-core/samtools/cat'
'modules/nf-core/samtools/cat/environment.yml' is unchanged
'modules/nf-core/samtools/cat/meta.yml' is unchanged
Changes in 'samtools/cat/main.nf':
@@ -19,6 +19,5 @@ Changes in 'samtools/cat/main.nf':
when:
'modules/nf-core/samtools/cat/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/samtools/cat/tests/tags.yml' is unchanged
'modules/nf-core/samtools/cat/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap
index 9af1b19f..2143309a 100644
--- a/modules/nf-core/samtools/cat/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/cat/tests/main.nf.test.snap
@@ -14,14 +14,14 @@
"bams_stub_versions": {
"content": [
[
- "versions.yml:md5,cd29ae344fb0bf5635527e1cb7a7d95f"
+ "versions.yml:md5,99695cce7873f354da5dd8660522cb4f"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T07:47:51.511914861"
+ "timestamp": "2025-09-10T13:02:09.79415"
},
"bams_bam": {
"content": [
@@ -58,13 +58,13 @@
"bams_versions": {
"content": [
[
- "versions.yml:md5,cd29ae344fb0bf5635527e1cb7a7d95f"
+ "versions.yml:md5,99695cce7873f354da5dd8660522cb4f"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T08:47:50.783194958"
+ "timestamp": "2025-09-10T13:02:05.668116"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/cat/tests/tags.yml b/modules/nf-core/samtools/cat/tests/tags.yml
deleted file mode 100644
index 97605570..00000000
--- a/modules/nf-core/samtools/cat/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/cat:
- - "modules/nf-core/samtools/cat/**"
diff --git a/modules/nf-core/samtools/convert/environment.yml b/modules/nf-core/samtools/convert/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/convert/environment.yml
+++ b/modules/nf-core/samtools/convert/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf
index 9942d052..f4003d42 100644
--- a/modules/nf-core/samtools/convert/main.nf
+++ b/modules/nf-core/samtools/convert/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_CONVERT {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(input), path(index), path(fasta), path(fai)
@@ -48,7 +48,7 @@ process SAMTOOLS_CONVERT {
"""
touch ${prefix}.${output_extension}
- touch ${prefix}.${index_extension}
+ touch ${prefix}.${output_extension}.${index_extension}
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/samtools/convert/meta.yml b/modules/nf-core/samtools/convert/meta.yml
index d5bfa161..519812ab 100644
--- a/modules/nf-core/samtools/convert/meta.yml
+++ b/modules/nf-core/samtools/convert/meta.yml
@@ -26,10 +26,12 @@ input:
type: file
description: BAM/CRAM file
pattern: "*.{bam,cram}"
+ ontologies: []
- index:
type: file
description: BAM/CRAM index file
pattern: "*.{bai,crai}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -39,6 +41,7 @@ input:
type: file
description: Reference file to create the CRAM file
pattern: "*.{fasta,fa}"
+ ontologies: []
- - meta3:
type: map
description: |
@@ -48,9 +51,10 @@ input:
type: file
description: Reference index file to create the CRAM file
pattern: "*.{fai}"
+ ontologies: []
output:
- - bam:
- - meta:
+ bam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -59,8 +63,9 @@ output:
type: file
description: filtered/converted BAM file
pattern: "*{.bam}"
- - cram:
- - meta:
+ ontologies: []
+ cram:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -69,8 +74,9 @@ output:
type: file
description: filtered/converted CRAM file
pattern: "*{cram}"
- - bai:
- - meta:
+ ontologies: []
+ bai:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -79,8 +85,9 @@ output:
type: file
description: filtered/converted BAM index
pattern: "*{.bai}"
- - crai:
- - meta:
+ ontologies: []
+ crai:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -89,11 +96,14 @@ output:
type: file
description: filtered/converted CRAM index
pattern: "*{.crai}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@FriederikeHanssen"
- "@maxulysse"
diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test b/modules/nf-core/samtools/convert/tests/main.nf.test
index 91a0c69e..cd603c53 100644
--- a/modules/nf-core/samtools/convert/tests/main.nf.test
+++ b/modules/nf-core/samtools/convert/tests/main.nf.test
@@ -74,7 +74,7 @@ nextflow_process {
}
test("sarscov2 - [bam, bai], fasta, fai - stub") {
-
+
options "-stub"
when {
diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test.snap b/modules/nf-core/samtools/convert/tests/main.nf.test.snap
index a021254e..a9ef27e0 100644
--- a/modules/nf-core/samtools/convert/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/convert/tests/main.nf.test.snap
@@ -22,26 +22,26 @@
"cram_to_bam_versions": {
"content": [
[
- "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6"
+ "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T07:52:35.516411351"
+ "timestamp": "2025-09-10T13:05:31.58641"
},
"bam_to_cram_versions": {
"content": [
[
- "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6"
+ "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T07:52:24.694454205"
+ "timestamp": "2025-09-10T13:05:26.933516"
},
"stub": {
"content": [
@@ -67,11 +67,11 @@
"id": "test",
"single_end": false
},
- "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"4": [
- "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6"
+ "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
],
"bai": [
@@ -85,7 +85,7 @@
"id": "test",
"single_end": false
},
- "test.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"cram": [
@@ -98,15 +98,15 @@
]
],
"versions": [
- "versions.yml:md5,5bc6eb42ab2a1ea6661f8ee998467ad6"
+ "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T07:52:45.799885099"
+ "timestamp": "2025-09-10T13:05:36.333776"
},
"bam_to_cram_index": {
"content": [
diff --git a/modules/nf-core/samtools/convert/tests/tags.yml b/modules/nf-core/samtools/convert/tests/tags.yml
deleted file mode 100644
index 030d5eb5..00000000
--- a/modules/nf-core/samtools/convert/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/convert:
- - "modules/nf-core/samtools/convert/**"
diff --git a/modules/nf-core/samtools/coverage/environment.yml b/modules/nf-core/samtools/coverage/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/coverage/environment.yml
+++ b/modules/nf-core/samtools/coverage/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/coverage/main.nf b/modules/nf-core/samtools/coverage/main.nf
index 11e347e8..e2adfddd 100644
--- a/modules/nf-core/samtools/coverage/main.nf
+++ b/modules/nf-core/samtools/coverage/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_COVERAGE {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(input), path(input_index), path(fasta), path(fai)
@@ -20,12 +20,17 @@ process SAMTOOLS_COVERAGE {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
+ def reference = fasta ? "--reference ${fasta}" : ""
+
+ if (input.name.endsWith('.cram') && (!fasta || !fai)) {
+ error "CRAM input file provided but no reference FASTA and/or FAI index for said reference, both are required for CRAM input."
+ }
"""
samtools \\
coverage \\
$args \\
-o ${prefix}.txt \\
- --reference ${fasta} \\
+ $reference \\
$input
cat <<-END_VERSIONS > versions.yml
diff --git a/modules/nf-core/samtools/coverage/meta.yml b/modules/nf-core/samtools/coverage/meta.yml
index fb9ba6f3..28dceb03 100644
--- a/modules/nf-core/samtools/coverage/meta.yml
+++ b/modules/nf-core/samtools/coverage/meta.yml
@@ -25,10 +25,12 @@ input:
type: file
description: BAM/CRAM/SAM file
pattern: "*.{bam,cram,sam}"
+ ontologies: []
- input_index:
type: file
description: BAM/CRAM index file
pattern: "*.{bai,crai}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -38,6 +40,7 @@ input:
type: file
description: Reference genome file
pattern: "*.{fa,fasta}"
+ ontologies: []
- - meta3:
type: map
description: |
@@ -47,9 +50,10 @@ input:
type: file
description: Reference genome index file
pattern: "*.fai"
+ ontologies: []
output:
- - coverage:
- - meta:
+ coverage:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -59,11 +63,14 @@ output:
description: Tabulated text containing the coverage at each position or region
or an ASCII-art histogram (with --histogram).
pattern: "*.txt"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@LouisLeNezet"
maintainers:
diff --git a/modules/nf-core/samtools/coverage/tests/main.nf.test b/modules/nf-core/samtools/coverage/tests/main.nf.test
index 1e3ad5a4..ffd36109 100644
--- a/modules/nf-core/samtools/coverage/tests/main.nf.test
+++ b/modules/nf-core/samtools/coverage/tests/main.nf.test
@@ -20,12 +20,12 @@ nextflow_process {
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true)
])
input[1] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ [:], // meta map
+ []
])
input[2] = Channel.of([
- [ id:'fai' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ [:], // meta map
+ []
])
"""
}
@@ -69,6 +69,65 @@ nextflow_process {
}
}
+ test("test_samtools_coverage_cram_no_fasta") {
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [id: 'test', single_end: false], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [:], // meta map
+ []
+ ])
+ input[2] = Channel.of([
+ [ id:'fai' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert !process.success },
+ { assert process.stdout.toString().contains("CRAM input file provided but no reference FASTA and/or FAI index for said reference, both are required for CRAM input.") },
+ )
+ }
+ }
+
+ test("test_samtools_coverage_cram_no_fai") {
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [id: 'test', single_end: false], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'fasta' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = Channel.of([
+ [:], // meta map
+ []
+ ])
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert !process.success },
+ { assert process.stdout.toString().contains("CRAM input file provided but no reference FASTA and/or FAI index for said reference, both are required for CRAM input.") },
+ )
+ }
+ }
+
+
test("test_samtools_coverage_stub") {
options "-stub"
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 b9ddb18d..68cc3697 100644
--- a/modules/nf-core/samtools/coverage/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/coverage/tests/main.nf.test.snap
@@ -12,7 +12,7 @@
]
],
"1": [
- "versions.yml:md5,9c876b9db54dc710c87c404e4b28243c"
+ "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
],
"coverage": [
[
@@ -24,15 +24,15 @@
]
],
"versions": [
- "versions.yml:md5,9c876b9db54dc710c87c404e4b28243c"
+ "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T07:53:42.773351407"
+ "timestamp": "2025-09-10T13:06:14.846123"
},
"test_samtools_coverage_bam": {
"content": [
@@ -47,7 +47,7 @@
]
],
"1": [
- "versions.yml:md5,9c876b9db54dc710c87c404e4b28243c"
+ "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
],
"coverage": [
[
@@ -59,15 +59,15 @@
]
],
"versions": [
- "versions.yml:md5,9c876b9db54dc710c87c404e4b28243c"
+ "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T07:53:22.798338025"
+ "timestamp": "2025-09-10T13:06:06.18797"
},
"test_samtools_coverage_cram": {
"content": [
@@ -82,7 +82,7 @@
]
],
"1": [
- "versions.yml:md5,9c876b9db54dc710c87c404e4b28243c"
+ "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
],
"coverage": [
[
@@ -94,14 +94,14 @@
]
],
"versions": [
- "versions.yml:md5,9c876b9db54dc710c87c404e4b28243c"
+ "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.7"
},
- "timestamp": "2024-09-16T07:53:32.409876082"
+ "timestamp": "2025-10-02T11:22:34.018328"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/coverage/tests/tags.yml b/modules/nf-core/samtools/coverage/tests/tags.yml
deleted file mode 100644
index 2b4f53c2..00000000
--- a/modules/nf-core/samtools/coverage/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/coverage:
- - "modules/nf-core/samtools/coverage/**"
diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/flagstat/environment.yml
+++ b/modules/nf-core/samtools/flagstat/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf
index c23f3a5c..f148f56b 100644
--- a/modules/nf-core/samtools/flagstat/main.nf
+++ b/modules/nf-core/samtools/flagstat/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_FLAGSTAT {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(bam), path(bai)
@@ -35,7 +35,19 @@ process SAMTOOLS_FLAGSTAT {
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
- touch ${prefix}.flagstat
+ cat <<-END_FLAGSTAT > ${prefix}.flagstat
+ 1000000 + 0 in total (QC-passed reads + QC-failed reads)
+ 0 + 0 secondary
+ 0 + 0 supplementary
+ 0 + 0 duplicates
+ 900000 + 0 mapped (90.00% : N/A)
+ 1000000 + 0 paired in sequencing
+ 500000 + 0 read1
+ 500000 + 0 read2
+ 800000 + 0 properly paired (80.00% : N/A)
+ 850000 + 0 with mate mapped to a different chr
+ 50000 + 0 with mate mapped to a different chr (mapQ>=5)
+ END_FLAGSTAT
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml
index cdc4c254..ebbc15f2 100644
--- a/modules/nf-core/samtools/flagstat/meta.yml
+++ b/modules/nf-core/samtools/flagstat/meta.yml
@@ -29,13 +29,15 @@ input:
type: file
description: BAM/CRAM/SAM file
pattern: "*.{bam,cram,sam}"
+ ontologies: []
- bai:
type: file
description: Index for BAM/CRAM/SAM file
pattern: "*.{bai,crai,sai}"
+ ontologies: []
output:
- - flagstat:
- - meta:
+ flagstat:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -44,11 +46,14 @@ output:
type: file
description: File containing samtools flagstat output
pattern: "*.{flagstat}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@drpatelh"
maintainers:
diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
index 04c3852b..0a0a9b15 100644
--- a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
@@ -8,11 +8,11 @@
"id": "test",
"single_end": false
},
- "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.flagstat:md5,67394650dbae96d1a4fcc70484822159"
]
],
"1": [
- "versions.yml:md5,108a155f2d4a99f50bf3176904208d27"
+ "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
],
"flagstat": [
[
@@ -20,19 +20,19 @@
"id": "test",
"single_end": false
},
- "test.flagstat:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.flagstat:md5,67394650dbae96d1a4fcc70484822159"
]
],
"versions": [
- "versions.yml:md5,108a155f2d4a99f50bf3176904208d27"
+ "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T08:02:58.866491759"
+ "timestamp": "2025-09-15T15:02:00.813612"
},
"BAM": {
"content": [
@@ -47,7 +47,7 @@
]
],
"1": [
- "versions.yml:md5,108a155f2d4a99f50bf3176904208d27"
+ "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
],
"flagstat": [
[
@@ -59,14 +59,14 @@
]
],
"versions": [
- "versions.yml:md5,108a155f2d4a99f50bf3176904208d27"
+ "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T08:02:47.383332837"
+ "timestamp": "2025-09-15T15:01:55.232954"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/flagstat/tests/tags.yml b/modules/nf-core/samtools/flagstat/tests/tags.yml
deleted file mode 100644
index 2d2b7255..00000000
--- a/modules/nf-core/samtools/flagstat/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/flagstat:
- - modules/nf-core/samtools/flagstat/**
diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/idxstats/environment.yml
+++ b/modules/nf-core/samtools/idxstats/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf
index e2bb6b20..9181a1a5 100644
--- a/modules/nf-core/samtools/idxstats/main.nf
+++ b/modules/nf-core/samtools/idxstats/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_IDXSTATS {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(bam), path(bai)
@@ -21,6 +21,7 @@ process SAMTOOLS_IDXSTATS {
def prefix = task.ext.prefix ?: "${meta.id}"
"""
+ # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads).
samtools \\
idxstats \\
--threads ${task.cpus-1} \\
diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml
index f0a6bcb2..96d42746 100644
--- a/modules/nf-core/samtools/idxstats/meta.yml
+++ b/modules/nf-core/samtools/idxstats/meta.yml
@@ -29,13 +29,15 @@ input:
type: file
description: BAM/CRAM/SAM file
pattern: "*.{bam,cram,sam}"
+ ontologies: []
- bai:
type: file
description: Index for BAM/CRAM/SAM file
pattern: "*.{bai,crai,sai}"
+ ontologies: []
output:
- - idxstats:
- - meta:
+ idxstats:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -44,11 +46,14 @@ output:
type: file
description: File containing samtools idxstats output
pattern: "*.{idxstats}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@drpatelh"
maintainers:
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
index 2cc89a3b..d3e785e0 100644
--- a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
@@ -12,7 +12,7 @@
]
],
"1": [
- "versions.yml:md5,c8d7394830c3c1e5be150589571534fb"
+ "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
],
"idxstats": [
[
@@ -24,15 +24,15 @@
]
],
"versions": [
- "versions.yml:md5,c8d7394830c3c1e5be150589571534fb"
+ "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T08:11:56.466856235"
+ "timestamp": "2025-09-10T13:47:35.796569"
},
"bam": {
"content": [
@@ -47,7 +47,7 @@
]
],
"1": [
- "versions.yml:md5,c8d7394830c3c1e5be150589571534fb"
+ "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
],
"idxstats": [
[
@@ -59,14 +59,14 @@
]
],
"versions": [
- "versions.yml:md5,c8d7394830c3c1e5be150589571534fb"
+ "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T08:11:46.311550359"
+ "timestamp": "2025-09-10T13:47:31.86415"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/idxstats/tests/tags.yml b/modules/nf-core/samtools/idxstats/tests/tags.yml
deleted file mode 100644
index d3057c61..00000000
--- a/modules/nf-core/samtools/idxstats/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/idxstats:
- - modules/nf-core/samtools/idxstats/**
diff --git a/modules/nf-core/samtools/import/environment.yml b/modules/nf-core/samtools/import/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/import/environment.yml
+++ b/modules/nf-core/samtools/import/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/import/main.nf b/modules/nf-core/samtools/import/main.nf
index b6927949..0efbc75a 100644
--- a/modules/nf-core/samtools/import/main.nf
+++ b/modules/nf-core/samtools/import/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_IMPORT {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0':
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0':
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(reads)
diff --git a/modules/nf-core/samtools/import/meta.yml b/modules/nf-core/samtools/import/meta.yml
index 5c98b8be..2b86ce79 100644
--- a/modules/nf-core/samtools/import/meta.yml
+++ b/modules/nf-core/samtools/import/meta.yml
@@ -28,9 +28,11 @@ input:
type: file
description: fastq data to be converted to SAM/BAM/CRAM
pattern: "*.{fastq,fq,fastq.gz,fq.gz}"
+ ontologies:
+ - edam: http://edamontology.org/format_1930 # FASTQ
output:
- - sam:
- - meta:
+ sam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -39,8 +41,9 @@ output:
type: file
description: SAM file
pattern: "*.sam"
- - bam:
- - meta:
+ ontologies: []
+ bam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -49,8 +52,9 @@ output:
type: file
description: Unaligned BAM file
pattern: "*.bam"
- - cram:
- - meta:
+ ontologies: []
+ cram:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -59,11 +63,14 @@ output:
type: file
description: Unaligned CRAM file
pattern: "*.cram"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/samtools/import/tests/tags.yml b/modules/nf-core/samtools/import/tests/tags.yml
deleted file mode 100644
index 89c89128..00000000
--- a/modules/nf-core/samtools/import/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/import:
- - modules/nf-core/samtools/import/**
diff --git a/modules/nf-core/samtools/sormadup/environment.yml b/modules/nf-core/samtools/sormadup/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/sormadup/environment.yml
+++ b/modules/nf-core/samtools/sormadup/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/sormadup/main.nf b/modules/nf-core/samtools/sormadup/main.nf
index 0ee7a0a7..25541ed8 100644
--- a/modules/nf-core/samtools/sormadup/main.nf
+++ b/modules/nf-core/samtools/sormadup/main.nf
@@ -4,8 +4,8 @@ process SAMTOOLS_SORMADUP {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(input), path(fasta)
diff --git a/modules/nf-core/samtools/sormadup/meta.yml b/modules/nf-core/samtools/sormadup/meta.yml
index bec58e87..bb6295bf 100644
--- a/modules/nf-core/samtools/sormadup/meta.yml
+++ b/modules/nf-core/samtools/sormadup/meta.yml
@@ -77,6 +77,7 @@ input:
type: file
description: BAM/CRAM/SAM files
pattern: "*.{bam,cram,sam}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -86,9 +87,10 @@ input:
type: file
description: Reference genome file
pattern: "*.{fasta,fa,fna}"
+ ontologies: []
output:
- - bam:
- - meta:
+ bam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -97,8 +99,9 @@ output:
type: file
description: Sorted and duplicate marked BAM file
pattern: "*.bam"
- - cram:
- - meta:
+ ontologies: []
+ cram:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -107,8 +110,9 @@ output:
type: file
description: Sorted and duplicate marked CRAM file
pattern: "*.cram"
- - csi:
- - meta:
+ ontologies: []
+ csi:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -117,8 +121,9 @@ output:
type: file
description: Sorted and duplicate marked BAM index file
pattern: "*.csi"
- - crai:
- - meta:
+ ontologies: []
+ crai:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -127,8 +132,9 @@ output:
type: file
description: Sorted and duplicate marked CRAM index file
pattern: "*.crai"
- - metrics:
- - meta:
+ ontologies: []
+ metrics:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -137,11 +143,14 @@ output:
type: file
description: Duplicate metrics file
pattern: "*.metrics"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/samtools/sormadup/tests/cram.config b/modules/nf-core/samtools/sormadup/tests/cram.config
index 8d6ce11a..69897ef7 100644
--- a/modules/nf-core/samtools/sormadup/tests/cram.config
+++ b/modules/nf-core/samtools/sormadup/tests/cram.config
@@ -7,7 +7,7 @@ process {
"-d 2500", // The optical duplicate distance
"--barcode-name", // Use the UMI/barcode embedded in the read name (eigth colon delimited part).
"--write-index", // Write csi/crai index
- "--output-fmt cram", // Output format
+ "--output-fmt cram,version=3.0",// Output format
"--output-fmt-option archive" // Cram compression level
].join(" ").trim()}
}
diff --git a/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap b/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap
index 56776605..7d36514f 100644
--- a/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap
@@ -30,7 +30,7 @@
]
],
"5": [
- "versions.yml:md5,ad563b12da6299eec5c39564782d0814"
+ "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
],
"bam": [
[
@@ -60,15 +60,15 @@
]
],
"versions": [
- "versions.yml:md5,ad563b12da6299eec5c39564782d0814"
+ "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.2",
+ "nextflow": "25.04.6"
},
- "timestamp": "2024-09-16T08:56:24.200237922"
+ "timestamp": "2025-09-10T14:41:27.357324"
},
"sarscov2 - cram": {
"content": [
@@ -80,15 +80,15 @@
"id": "test",
"single_end": false
},
- "test.merged.metrics:md5,548ff6d0d22ef710858639fe22e90004"
+ "test.merged.metrics:md5,02eebd31b097e165e1b18d84b023f18d"
]
]
],
"meta": {
"nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nextflow": "25.04.6"
},
- "timestamp": "2025-02-05T12:24:12.517796"
+ "timestamp": "2025-09-10T15:34:19.685282"
},
"sarscov2 - bam": {
"content": [
@@ -99,7 +99,7 @@
"id": "test",
"single_end": false
},
- "test.bam:md5,4dd85f1abbd2806887c6942f9c84595a"
+ "test.bam:md5,22ccf80de9847da1fa532f7774580554"
]
],
"1": [
@@ -121,7 +121,7 @@
]
],
"5": [
- "versions.yml:md5,ad563b12da6299eec5c39564782d0814"
+ "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
],
"bam": [
[
@@ -129,7 +129,7 @@
"id": "test",
"single_end": false
},
- "test.bam:md5,4dd85f1abbd2806887c6942f9c84595a"
+ "test.bam:md5,22ccf80de9847da1fa532f7774580554"
]
],
"crai": [
@@ -151,14 +151,14 @@
]
],
"versions": [
- "versions.yml:md5,ad563b12da6299eec5c39564782d0814"
+ "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
]
}
],
"meta": {
"nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nextflow": "25.04.6"
},
- "timestamp": "2025-02-05T11:48:51.866973"
+ "timestamp": "2025-09-10T14:41:11.744386"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/sormadup/tests/tags.yml b/modules/nf-core/samtools/sormadup/tests/tags.yml
deleted file mode 100644
index cf362be7..00000000
--- a/modules/nf-core/samtools/sormadup/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/sormadup:
- - "modules/nf-core/samtools/sormadup/**"
diff --git a/modules/nf-core/samtools/sort/environment.yml b/modules/nf-core/samtools/sort/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/sort/environment.yml
+++ b/modules/nf-core/samtools/sort/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf
index 53bb171a..7b83e4a1 100644
--- a/modules/nf-core/samtools/sort/main.nf
+++ b/modules/nf-core/samtools/sort/main.nf
@@ -4,30 +4,40 @@ process SAMTOOLS_SORT {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta) , path(bam), path(fasta)
output:
- tuple val(meta), path("*.bam"), emit: bam, optional: true
- tuple val(meta), path("*.cram"), emit: cram, optional: true
- tuple val(meta), path("*.crai"), emit: crai, optional: true
- tuple val(meta), path("*.csi"), emit: csi, optional: true
- path "versions.yml", emit: versions
+ tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true
+ tuple val(meta), path("${prefix}.cram"), emit: cram, optional: true
+ tuple val(meta), path("${prefix}.sam"), emit: sam, optional: true
+ tuple val(meta), path("${prefix}.${extension}.crai"), emit: crai, optional: true
+ tuple val(meta), path("${prefix}.${extension}.csi"), emit: csi, optional: true
+ tuple val(meta), path("${prefix}.${extension}.bai"), emit: bai, optional: true
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools
when:
task.ext.when == null || task.ext.when
script:
def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
- def extension = args.contains("--output-fmt sam") ? "sam" :
- args.contains("--output-fmt cram") ? "cram" :
- "bam"
+ prefix = task.ext.prefix ?: "${meta.id}"
+ extension = args.contains("--output-fmt sam") ? "sam" :
+ args.contains("--output-fmt cram") ? "cram" :
+ "bam"
def reference = fasta ? "--reference ${fasta}" : ""
def sort_memory = (task.memory.mega/task.cpus*0.75).intValue()
+ output_file = index_format ? "${prefix}.${extension}##idx##${prefix}.${extension}.${index_format} --write-index" : "${prefix}.${extension}"
+ if (index_format) {
+ if (!index_format.matches('bai|csi|crai')) {
+ error "Index format not one of bai, csi, crai."
+ } else if (extension == "sam") {
+ error "Indexing not compatible with SAM output"
+ }
+ }
if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
"""
@@ -40,34 +50,29 @@ process SAMTOOLS_SORT {
--threads $task.cpus \\
${reference} \\
-m ${sort_memory}M \\
- -o ${prefix}.${extension} \\
+ -o ${output_file} \\
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
- def extension = args.contains("--output-fmt sam") ? "sam" :
- args.contains("--output-fmt cram") ? "cram" :
- "bam"
+ prefix = task.ext.prefix ?: "${meta.id}"
+ extension = args.contains("--output-fmt sam") ? "sam" :
+ args.contains("--output-fmt cram") ? "cram" :
+ "bam"
+ if (index_format) {
+ if (!index_format.matches('bai|csi|crai')) {
+ error "Index format not one of bai, csi, crai."
+ } else if (extension == "sam") {
+ error "Indexing not compatible with SAM output"
+ }
+ }
+ index = index_format ? "touch ${prefix}.${extension}.${index_format}" : ""
+
"""
touch ${prefix}.${extension}
- if [ "${extension}" == "bam" ];
- then
- touch ${prefix}.${extension}.csi
- elif [ "${extension}" == "cram" ];
- then
- touch ${prefix}.${extension}.crai
- fi
+ ${index}
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml
index a9dbec5a..809a57fc 100644
--- a/modules/nf-core/samtools/sort/meta.yml
+++ b/modules/nf-core/samtools/sort/meta.yml
@@ -26,6 +26,7 @@ input:
type: file
description: BAM/CRAM/SAM file(s)
pattern: "*.{bam,cram,sam}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -36,52 +37,100 @@ input:
description: Reference genome FASTA file
pattern: "*.{fa,fasta,fna}"
optional: true
+ ontologies: []
+ - index_format:
+ type: string
+ description: Index format to use (optional)
+ pattern: "bai|csi|crai"
output:
- - bam:
- - meta:
+ bam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- - "*.bam":
+ - "${prefix}.bam":
type: file
description: Sorted BAM file
pattern: "*.{bam}"
- - cram:
- - meta:
+ ontologies: []
+ cram:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- - "*.cram":
+ - "${prefix}.cram":
type: file
description: Sorted CRAM file
pattern: "*.{cram}"
- - crai:
- - meta:
+ ontologies: []
+ sam:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- - "*.crai":
+ - "${prefix}.sam":
+ type: file
+ description: Sorted SAM file
+ pattern: "*.{sam}"
+ ontologies: []
+ crai:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - "${prefix}.${extension}.crai":
type: file
description: CRAM index file (optional)
pattern: "*.crai"
- - csi:
- - meta:
+ ontologies: []
+ csi:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
- - "*.csi":
+ - "${prefix}.${extension}.csi":
type: file
description: BAM index file (optional)
pattern: "*.csi"
- - versions:
- - versions.yml:
+ ontologies: []
+ bai:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - "${prefix}.${extension}.bai":
type: file
- description: File containing software versions
- pattern: "versions.yml"
+ description: BAM index file (optional)
+ pattern: "*.bai"
+ ontologies: []
+ versions_samtools:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - samtools:
+ type: string
+ description: The tool name
+ - "samtools version | sed '1!d;s/.* //'":
+ type: string
+ description: The command used to generate the version of the tool
+
+topics:
+ versions:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - samtools:
+ type: string
+ description: The tool name
+ - "samtools version | sed '1!d;s/.* //'":
+ type: string
+ description: The command used to generate the version of the tool
authors:
- "@drpatelh"
- "@ewels"
diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test b/modules/nf-core/samtools/sort/tests/main.nf.test
index b05e6691..df47bb25 100644
--- a/modules/nf-core/samtools/sort/tests/main.nf.test
+++ b/modules/nf-core/samtools/sort/tests/main.nf.test
@@ -8,7 +8,7 @@ nextflow_process {
tag "samtools"
tag "samtools/sort"
- test("bam") {
+ test("bam_no_index") {
config "./nextflow.config"
@@ -23,6 +23,7 @@ nextflow_process {
[ id:'fasta' ], // meta map
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
])
+ input[2] = ''
"""
}
}
@@ -32,8 +33,72 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
process.out.bam,
- process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } },
- process.out.versions
+ process.out.bai,
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match()}
+ )
+ }
+ }
+
+ test("bam_bai_index") {
+
+ config "./nextflow.config"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'fasta' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = 'bai'
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(
+ process.out.bam,
+ process.out.bai,
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match()}
+ )
+ }
+ }
+
+ test("bam_csi_index") {
+
+ config "./nextflow.config"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
+ ])
+ input[1] = Channel.of([
+ [ id:'fasta' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = 'csi'
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(
+ process.out.bam,
+ process.out.csi,
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()}
)
}
@@ -57,6 +122,77 @@ nextflow_process {
[ id:'fasta' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
])
+ input[2] = ''
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(
+ process.out.bam,
+ process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match()}
+ )
+ }
+ }
+
+ test("multiple bam bai index") {
+
+ config "./nextflow.config"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ [
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true)
+ ]
+ ])
+ input[1] = Channel.of([
+ [ id:'fasta' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = 'bai'
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(
+ process.out.bam,
+ process.out.bai.collect { it.collect { it instanceof Map ? it : file(it).name } },
+ process.out.findAll { key, val -> key.startsWith("versions") }
+ ).match()}
+ )
+ }
+ }
+
+ test("multiple bam csi index") {
+
+ config "./nextflow.config"
+
+ when {
+ process {
+ """
+ input[0] = Channel.of([
+ [ id:'test', single_end:false ], // meta map
+ [
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true)
+ ]
+ ])
+ input[1] = Channel.of([
+ [ id:'fasta' ], // meta map
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
+ ])
+ input[2] = 'csi'
"""
}
}
@@ -67,7 +203,7 @@ nextflow_process {
{ assert snapshot(
process.out.bam,
process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } },
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()}
)
}
@@ -88,6 +224,7 @@ nextflow_process {
[ id:'fasta' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
])
+ input[2] = ''
"""
}
}
@@ -98,7 +235,7 @@ nextflow_process {
{ assert snapshot(
process.out.cram.collect { it.collect { it instanceof Map ? it : file(it).name } },
process.out.crai.collect { it.collect { it instanceof Map ? it : file(it).name } },
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()}
)
}
@@ -120,6 +257,7 @@ nextflow_process {
[ id:'fasta' ], // meta map
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
])
+ input[2] = ''
"""
}
}
@@ -127,7 +265,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() }
)
}
}
@@ -150,6 +288,7 @@ nextflow_process {
[ id:'fasta' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
])
+ input[2] = ''
"""
}
}
@@ -157,7 +296,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() }
)
}
}
@@ -178,6 +317,7 @@ nextflow_process {
[ id:'fasta' ], // meta map
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
])
+ input[2] = ''
"""
}
}
@@ -185,7 +325,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out.findAll { key, val -> key.startsWith("versions") }).match() }
)
}
}
diff --git a/modules/nf-core/samtools/sort/tests/main.nf.test.snap b/modules/nf-core/samtools/sort/tests/main.nf.test.snap
index 469891fe..4e618fa3 100644
--- a/modules/nf-core/samtools/sort/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/sort/tests/main.nf.test.snap
@@ -19,147 +19,77 @@
"test.sorted.cram.crai"
]
],
- [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
- ]
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T08:49:58.207549273"
+ "timestamp": "2025-10-29T12:47:01.171084"
},
- "bam - stub": {
+ "bam_csi_index": {
"content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam:md5,72ca1dff5344a5e5e6b892fe5f6b134d"
+ ]
+ ],
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam.csi:md5,01394e702c729cb478df914ffaf9f7f8"
+ ]
+ ],
{
- "0": [
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
]
- ],
- "1": [
-
- ],
- "2": [
-
- ],
- "3": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "4": [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
- ],
- "bam": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "crai": [
-
- ],
- "cram": [
-
- ],
- "csi": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam.csi:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions": [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T08:50:08.630951018"
+ "timestamp": "2025-10-29T12:46:00.961675"
},
- "cram - stub": {
+ "bam - stub": {
"content": [
{
- "0": [
-
- ],
- "1": [
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
]
- ],
- "2": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "3": [
-
- ],
- "4": [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
- ],
- "bam": [
-
- ],
- "crai": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "cram": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.cram:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "csi": [
-
- ],
- "versions": [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T08:50:19.061912443"
+ "timestamp": "2025-10-29T12:47:12.154354"
},
- "multiple bam": {
+ "multiple bam bai index": {
"content": [
[
[
@@ -167,7 +97,7 @@
"id": "test",
"single_end": false
},
- "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12"
+ "test.sorted.bam:md5,3ffa2affc29f0aa6e7b36dded84625fe"
]
],
[
@@ -176,85 +106,122 @@
"id": "test",
"single_end": false
},
- "test.sorted.bam.csi"
+ "test.sorted.bam.bai"
]
],
- [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
- ]
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.09.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-10-08T11:59:55.479443"
+ "timestamp": "2025-10-29T12:46:25.488622"
},
- "multiple bam - stub": {
+ "cram - stub": {
"content": [
{
- "0": [
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12"
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
]
- ],
- "1": [
-
- ],
- "2": [
-
- ],
- "3": [
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
+ },
+ "timestamp": "2025-10-29T12:47:28.485045"
+ },
+ "multiple bam": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam:md5,cd4eb0077f25e9cff395366b8883dd1f"
+ ]
+ ],
+ [
+
+ ],
+ {
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9"
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
]
- ],
- "4": [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
- ],
- "bam": [
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
+ },
+ "timestamp": "2025-10-29T12:46:13.168476"
+ },
+ "multiple bam - stub": {
+ "content": [
+ {
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam:md5,8a16ba90c7d294cbb4c33ac0f7127a12"
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
]
- ],
- "crai": [
-
- ],
- "cram": [
-
- ],
- "csi": [
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
+ },
+ "timestamp": "2025-10-29T12:47:21.628088"
+ },
+ "bam_no_index": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam:md5,26b27d1f9bcb61c25da21b562349784e"
+ ]
+ ],
+ [
+
+ ],
+ {
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sorted.bam.csi:md5,d185916eaff9afeb4d0aeab3310371f9"
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
]
- ],
- "versions": [
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.09.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-10-08T11:36:13.781404"
+ "timestamp": "2025-10-29T12:45:47.139418"
},
- "bam": {
+ "multiple bam csi index": {
"content": [
[
[
@@ -262,7 +229,7 @@
"id": "test",
"single_end": false
},
- "test.sorted.bam:md5,34aa85e86abefe637f7a4a9887f016fc"
+ "test.sorted.bam:md5,295503ba5342531a3310c33ad0efbc22"
]
],
[
@@ -274,14 +241,56 @@
"test.sorted.bam.csi"
]
],
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
+ },
+ "timestamp": "2025-10-29T12:46:51.5531"
+ },
+ "bam_bai_index": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam:md5,cae7564cb83bb4a5911205bf94124b54"
+ ]
+ ],
[
- "versions.yml:md5,2659b187d681241451539d4c53500b9f"
- ]
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.sorted.bam.bai:md5,50dd467c169545a4d5d1f709f7e986e0"
+ ]
+ ],
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORT",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.09.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-10-08T11:59:46.372244"
+ "timestamp": "2025-10-29T12:45:52.796936"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/sort/tests/nextflow.config b/modules/nf-core/samtools/sort/tests/nextflow.config
index f642771f..723f62b2 100644
--- a/modules/nf-core/samtools/sort/tests/nextflow.config
+++ b/modules/nf-core/samtools/sort/tests/nextflow.config
@@ -2,7 +2,6 @@ process {
withName: SAMTOOLS_SORT {
ext.prefix = { "${meta.id}.sorted" }
- ext.args = "--write-index"
}
}
diff --git a/modules/nf-core/samtools/sort/tests/tags.yml b/modules/nf-core/samtools/sort/tests/tags.yml
deleted file mode 100644
index cd63ea20..00000000
--- a/modules/nf-core/samtools/sort/tests/tags.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-samtools/sort:
- - modules/nf-core/samtools/sort/**
- - tests/modules/nf-core/samtools/sort/**
diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml
index 62054fc9..89e12a64 100644
--- a/modules/nf-core/samtools/stats/environment.yml
+++ b/modules/nf-core/samtools/stats/environment.yml
@@ -4,5 +4,7 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::htslib=1.21
- - bioconda::samtools=1.21
+ # renovate: datasource=conda depName=bioconda/htslib
+ - bioconda::htslib=1.22.1
+ # renovate: datasource=conda depName=bioconda/samtools
+ - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf
index 1e32e8a0..7b070ac3 100644
--- a/modules/nf-core/samtools/stats/main.nf
+++ b/modules/nf-core/samtools/stats/main.nf
@@ -4,15 +4,15 @@ process SAMTOOLS_STATS {
conda "${moduleDir}/environment.yml"
container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' :
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
tuple val(meta), path(input), path(input_index), path(fasta)
output:
tuple val(meta), path("*.stats"), emit: stats
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('samtools'), eval('samtools version | sed "1!d;s/.* //"'), emit: versions_samtools, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -27,21 +27,11 @@ process SAMTOOLS_STATS {
${reference} \\
${input} \\
> ${prefix}.stats
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.stats
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml
index 77b020f7..a20509ae 100644
--- a/modules/nf-core/samtools/stats/meta.yml
+++ b/modules/nf-core/samtools/stats/meta.yml
@@ -27,10 +27,12 @@ input:
type: file
description: BAM/CRAM file from alignment
pattern: "*.{bam,cram}"
+ ontologies: []
- input_index:
type: file
description: BAI/CRAI file from alignment
pattern: "*.{bai,crai}"
+ ontologies: []
- - meta2:
type: map
description: |
@@ -40,9 +42,10 @@ input:
type: file
description: Reference file the CRAM was created with (optional)
pattern: "*.{fasta,fa}"
+ ontologies: []
output:
- - stats:
- - meta:
+ stats:
+ - - meta:
type: map
description: |
Groovy Map containing sample information
@@ -51,11 +54,29 @@ output:
type: file
description: File containing samtools stats output
pattern: "*.{stats}"
- - versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
+ ontologies: []
+ versions_samtools:
+ - - ${task.process}:
+ type: string
+ description: Name of the process
+ - samtools:
+ type: string
+ description: Name of the tool
+ - samtools version | sed "1!d;s/.* //:
+ type: string
+ description: The command used to generate the version of the tool
+
+topics:
+ versions:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - samtools:
+ type: string
+ description: The tool name
+ - samtools version | sed "1!d;s/.* //:
+ type: string
+ description: The command used to generate the version of the tool
authors:
- "@drpatelh"
- "@FriederikeHanssen"
diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap
index df507be7..94d981b2 100644
--- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap
@@ -8,11 +8,15 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06"
+ "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba"
]
],
"1": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
],
"stats": [
[
@@ -20,19 +24,23 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,a27fe55e49a341f92379bb20a65c6a06"
+ "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba"
]
],
- "versions": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T09:29:16.767396182"
+ "timestamp": "2025-11-01T02:27:18.460724"
},
"bam - stub": {
"content": [
@@ -47,7 +55,11 @@
]
],
"1": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
],
"stats": [
[
@@ -58,16 +70,20 @@
"test.stats:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T09:29:29.721580274"
+ "timestamp": "2025-11-01T02:27:30.245839"
},
"cram - stub": {
"content": [
@@ -82,7 +98,11 @@
]
],
"1": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
],
"stats": [
[
@@ -93,16 +113,20 @@
"test.stats:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T09:29:53.567964304"
+ "timestamp": "2025-11-01T02:27:39.041649"
},
"bam": {
"content": [
@@ -113,11 +137,15 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,d53a2584376d78942839e9933a34d11b"
+ "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9"
]
],
"1": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
],
"stats": [
[
@@ -125,18 +153,22 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,d53a2584376d78942839e9933a34d11b"
+ "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9"
]
],
- "versions": [
- "versions.yml:md5,15b91d8c0e0440332e0fe4df80957043"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_STATS",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.0"
},
- "timestamp": "2024-09-16T09:28:50.73610604"
+ "timestamp": "2025-11-01T02:26:55.988241"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/stats/tests/tags.yml b/modules/nf-core/samtools/stats/tests/tags.yml
deleted file mode 100644
index 7c28e30f..00000000
--- a/modules/nf-core/samtools/stats/tests/tags.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-samtools/stats:
- - modules/nf-core/samtools/stats/**
From 9c17c7919d0e3490b2d139d512397d9da53cf575 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:50:55 +0100
Subject: [PATCH 058/228] fix snap config
---
conf/modules.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conf/modules.config b/conf/modules.config
index 512adf84..acb7eefc 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -112,7 +112,7 @@ process {
// -xf 2 : expansion factor for reading compressed data
//// SNAP
- withName: SNAP_ALIGN {
+ withName: SNAPALIGNER_ALIGN {
ext.args = {
[
"-b-",
From 14cafdd41f0011eea48e74901bbdaabe43cb7348 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:51:05 +0100
Subject: [PATCH 059/228] update ro-crate
---
ro-crate-metadata.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
index 1bcdab89..632da7c3 100644
--- a/ro-crate-metadata.json
+++ b/ro-crate-metadata.json
@@ -23,7 +23,7 @@
"@type": "Dataset",
"creativeWorkStatus": "InProgress",
"datePublished": "2025-11-13T15:11:21+00:00",
- "description": "# nf-cmgg/preprocessing\n\n[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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) or [`snap`](https://github.com/amplab/snap) 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\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,fastq_1,fastq_2\nsample1,sample1,Homo sapiens,Library_Name,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\nfc_sample1,test,Homo sapiens,WES\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",
+ "description": "# nf-cmgg/preprocessing\n\n[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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\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,fastq_1,fastq_2\nsample1,sample1,Homo sapiens,Library_Name,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\nfc_sample1,test,Homo sapiens,WES\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"
From 1c8e34a4d4f3030217424a098293fa6a7d95d496 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:52:35 +0100
Subject: [PATCH 060/228] fix files-unchanged
---
.github/workflows/linting.yml | 6 +-
.prettierignore | 2 +
.../fastq_align_dna/fastq_align_dna.diff | 85 ++++++++++++-------
3 files changed, 59 insertions(+), 34 deletions(-)
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index 30e66026..7a527a34 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -11,7 +11,7 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Set up Python 3.14
uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
@@ -28,7 +28,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out pipeline code
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
+ uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
- name: Install Nextflow
uses: nf-core/setup-nextflow@v2
@@ -71,7 +71,7 @@ jobs:
- name: Upload linting log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
with:
name: linting-logs
path: |
diff --git a/.prettierignore b/.prettierignore
index 2255e3e3..dd749d43 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -12,3 +12,5 @@ testing*
bin/
.nf-test/
ro-crate-metadata.json
+modules/nf-core/
+subworkflows/nf-core/
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 44d24df2..3b39944b 100644
--- a/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
+++ b/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
@@ -1,8 +1,26 @@
Changes in component 'nf-core/fastq_align_dna'
+'subworkflows/nf-core/fastq_align_dna/meta.yml' is unchanged
Changes in 'fastq_align_dna/main.nf':
--- subworkflows/nf-core/fastq_align_dna/main.nf
+++ subworkflows/nf-core/fastq_align_dna/main.nf
-@@ -15,51 +15,59 @@
+@@ -5,68 +5,77 @@
+ //
+
+
+-include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
+-include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
+-include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
+-include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
+-include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
+-include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
++include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
++include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
++include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
++include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
++include { SNAPALIGNER_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
++include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
+
+
workflow FASTQ_ALIGN_DNA {
take:
@@ -36,6 +54,8 @@ Changes in 'fastq_align_dna/main.nf':
+ return [meta, reads, index, fasta]
+ snap : aligner == 'snap'
+ return [meta, reads, index]
++ strobe : aligner == 'strobe'
++ return [meta, reads, fasta, index]
+ other : true
+ }
+ .set{ch_to_align}
@@ -48,63 +68,66 @@ Changes in 'fastq_align_dna/main.nf':
// Align fastq files to reference genome and (optionally) sort
- if (aligner == 'bowtie2') {
- BOWTIE2_ALIGN(ch_reads, ch_aligner_index, ch_fasta, false, sort) // if aligner is bowtie2
-- ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
++ BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort) // if aligner is bowtie2
+ ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
- ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions)
- }
- else if (aligner == 'bwamem'){
- BWAMEM1_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem
-- ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
-- ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
++ ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions.first())
++
++ BWAMEM1_MEM (ch_to_align.bwamem, sort) // If aligner is bwa-mem
+ ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
+ ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
- ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions)
- }
- else if (aligner == 'bwamem2'){
- BWAMEM2_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem2
-- ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
++ ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions.first())
++
++ BWAMEM2_MEM (ch_to_align.bwamem2, sort) // If aligner is bwa-mem2
+ ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
- ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions)
- }
- else if (aligner == 'dragmap'){
- DRAGMAP_ALIGN(ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is dragmap
-- ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
-- ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
++ ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first())
++
++ DRAGMAP_ALIGN(ch_to_align.dragmap, sort) // If aligner is dragmap
+ ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
+ ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
- ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions)
- }
- else if (aligner == 'snap'){
-- SNAP_ALIGN (ch_reads, ch_aligner_index) // If aligner is snap
+- SNAP_ALIGN (ch_reads, ch_aligner_index) // If aligner is snap
- ch_bam = ch_bam.mix(SNAP_ALIGN.out.bam)
- ch_bam_index.mix(SNAP_ALIGN.out.bai)
- ch_versions = ch_versions.mix(SNAP_ALIGN.out.versions)
- }
+- else if (aligner == 'strobealign'){
+- STROBEALIGN (ch_reads, ch_fasta, ch_aligner_index, sort) // If aligner is strobealign
+- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
+- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
+- ch_versions = ch_versions.mix(STROBEALIGN.out.versions)
+- }
- else {
- error "Unknown aligner: ${aligner}"
- }
-+ BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort) // if aligner is bowtie2
-+ ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
-+ ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions.first())
-+
-+ BWAMEM1_MEM (ch_to_align.bwamem, sort) // If aligner is bwa-mem
-+ ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
-+ ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
-+ ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions.first())
-+
-+ BWAMEM2_MEM (ch_to_align.bwamem2, sort) // If aligner is bwa-mem2
-+ ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
-+ ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first())
-+
-+ DRAGMAP_ALIGN(ch_to_align.dragmap, sort) // If aligner is dragmap
-+ ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
-+ ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
+ ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions.first())
+
-+ SNAP_ALIGN(ch_to_align.snap) // If aligner is snap
-+ ch_bam = ch_bam.mix(SNAP_ALIGN.out.bam)
-+ ch_bam_index.mix(SNAP_ALIGN.out.bai)
-+ ch_versions = ch_versions.mix(SNAP_ALIGN.out.versions.first())
++ SNAPALIGNER_ALIGN(ch_to_align.snap) // If aligner is snap
++ ch_bam = ch_bam.mix(SNAPALIGNER_ALIGN.out.bam)
++ ch_bam_index.mix(SNAPALIGNER_ALIGN.out.bai)
++ ch_versions = ch_versions.mix(SNAPALIGNER_ALIGN.out.versions.first())
++
++ STROBEALIGN(ch_to_align.strobe, sort) // If aligner is strobealign
++ ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
++ ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
++ ch_versions = ch_versions.mix(STROBEALIGN.out.versions.first())
emit:
bam = ch_bam // channel: [ [meta], bam ]
-'subworkflows/nf-core/fastq_align_dna/meta.yml' is unchanged
-'subworkflows/nf-core/fastq_align_dna/tests/main.nf.test' is unchanged
'subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap' is unchanged
-'subworkflows/nf-core/fastq_align_dna/tests/nextflow.config' is unchanged
+'subworkflows/nf-core/fastq_align_dna/tests/main.nf.test' is unchanged
************************************************************
From a4555b6438af40e02b0ef1bf3d679bcf60127e55 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 12:18:50 +0100
Subject: [PATCH 061/228] patch modules
---
modules.json | 12 +++---
.../nf-core/bowtie2/align/bowtie2-align.diff | 5 +--
modules/nf-core/bwa/mem/bwa-mem.diff | 5 +--
modules/nf-core/bwamem2/mem/bwamem2-mem.diff | 5 +--
.../nf-core/dragmap/align/dragmap-align.diff | 13 +++---
modules/nf-core/fastp/fastp.diff | 21 ----------
modules/nf-core/mosdepth/mosdepth.diff | 5 +--
.../nf-core/picard/collecthsmetrics/main.nf | 6 +--
.../picard-collecthsmetrics.diff | 40 +++++++++++++++----
.../picard-collectmultiplemetrics.diff | 4 +-
.../picard-collectwgsmetrics.diff | 4 +-
.../samtools/convert/samtools-convert.diff | 5 +--
.../samtools/coverage/samtools-coverage.diff | 5 +--
.../samtools/sormadup/samtools-sormadup.diff | 5 +--
modules/nf-core/samtools/sort/main.nf | 1 +
.../nf-core/samtools/sort/samtools-sort.diff | 24 +++++------
.../samtools/stats/samtools-stats.diff | 5 +--
.../snapaligner/align/snapaligner-align.diff | 2 +-
modules/nf-core/star/align/star-align.diff | 10 ++---
modules/nf-core/strobealign/strobealign.diff | 22 ++++++++++
subworkflows/local/bam_qc/meta.yml | 0
subworkflows/local/coverage/meta.yml | 0
subworkflows/local/fastq_align_rna/meta.yml | 0
.../local/fastq_to_aligned_cram/meta.yml | 0
.../local/fastq_to_unaligned_cram/meta.yml | 0
.../meta.yml | 0
.../nf-core/utils_nfcore_pipeline/main.nf | 2 +-
.../utils_nfcore_pipeline.diff | 21 ++++++++++
28 files changed, 131 insertions(+), 91 deletions(-)
delete mode 100644 modules/nf-core/fastp/fastp.diff
create mode 100644 modules/nf-core/strobealign/strobealign.diff
create mode 100644 subworkflows/local/bam_qc/meta.yml
create mode 100644 subworkflows/local/coverage/meta.yml
create mode 100644 subworkflows/local/fastq_align_rna/meta.yml
create mode 100644 subworkflows/local/fastq_to_aligned_cram/meta.yml
create mode 100644 subworkflows/local/fastq_to_unaligned_cram/meta.yml
create mode 100644 subworkflows/local/utils_nfcore_preprocessing_pipeline/meta.yml
create mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff
diff --git a/modules.json b/modules.json
index 7d0d7bc8..d3c15c5a 100644
--- a/modules.json
+++ b/modules.json
@@ -48,8 +48,7 @@
"fastp": {
"branch": "master",
"git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
- "installed_by": ["modules"],
- "patch": "modules/nf-core/fastp/fastp.diff"
+ "installed_by": ["modules"]
},
"md5sum": {
"branch": "master",
@@ -151,7 +150,8 @@
"strobealign": {
"branch": "master",
"git_sha": "d5cc72b63c4e1565cb66e83f0577b04c0bb54d5c",
- "installed_by": ["fastq_align_dna", "modules"]
+ "installed_by": ["fastq_align_dna", "modules"],
+ "patch": "modules/nf-core/strobealign/strobealign.diff"
}
}
},
@@ -165,8 +165,7 @@
"fastq_align_dna": {
"branch": "master",
"git_sha": "070ddae7fb59384d3d85bf69eb9a1d71ab33ada9",
- "installed_by": ["subworkflows"],
- "patch": "subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff"
+ "installed_by": ["subworkflows"]
},
"utils_nextflow_pipeline": {
"branch": "master",
@@ -176,7 +175,8 @@
"utils_nfcore_pipeline": {
"branch": "master",
"git_sha": "271e7fc14eb1320364416d996fb077421f3faed2",
- "installed_by": ["subworkflows"]
+ "installed_by": ["subworkflows"],
+ "patch": "subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff"
},
"utils_nfschema_plugin": {
"branch": "master",
diff --git a/modules/nf-core/bowtie2/align/bowtie2-align.diff b/modules/nf-core/bowtie2/align/bowtie2-align.diff
index 1a6f0ab5..33d3a5cf 100644
--- a/modules/nf-core/bowtie2/align/bowtie2-align.diff
+++ b/modules/nf-core/bowtie2/align/bowtie2-align.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/bowtie2/align'
+Changes in component 'nf-core/bowtie2/align'
'modules/nf-core/bowtie2/align/environment.yml' is unchanged
'modules/nf-core/bowtie2/align/meta.yml' is unchanged
Changes in 'bowtie2/align/main.nf':
--- modules/nf-core/bowtie2/align/main.nf
+++ modules/nf-core/bowtie2/align/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/mulled-v2-ac74a7f02cebcfcc07d8e8d1d750af9c83b4d45a:f70b31a2db15c023d641c32f433fb02cd04df5a6-0' }"
+ 'community.wave.seqera.io/library/bowtie2_htslib_samtools_pigz:edeb13799090a2a6' }"
input:
- tuple val(meta) , path(reads)
@@ -19,7 +19,6 @@ Changes in 'bowtie2/align/main.nf':
'modules/nf-core/bowtie2/align/tests/main.nf.test.snap' is unchanged
'modules/nf-core/bowtie2/align/tests/large_index.config' is unchanged
'modules/nf-core/bowtie2/align/tests/sam2.config' is unchanged
-'modules/nf-core/bowtie2/align/tests/tags.yml' is unchanged
'modules/nf-core/bowtie2/align/tests/main.nf.test' is unchanged
'modules/nf-core/bowtie2/align/tests/sam.config' is unchanged
'modules/nf-core/bowtie2/align/tests/cram_crai.config' is unchanged
diff --git a/modules/nf-core/bwa/mem/bwa-mem.diff b/modules/nf-core/bwa/mem/bwa-mem.diff
index e07a383f..07ca43b0 100644
--- a/modules/nf-core/bwa/mem/bwa-mem.diff
+++ b/modules/nf-core/bwa/mem/bwa-mem.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/bwa/mem'
+Changes in component 'nf-core/bwa/mem'
'modules/nf-core/bwa/mem/environment.yml' is unchanged
'modules/nf-core/bwa/mem/meta.yml' is unchanged
Changes in 'bwa/mem/main.nf':
--- modules/nf-core/bwa/mem/main.nf
+++ modules/nf-core/bwa/mem/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/mulled-v2-fe8faa35dbf6dc65a0f7f5d4ea12e31a79f73e40:1bd8542a8a0b42e0981337910954371d0230828e-0' }"
+ 'community.wave.seqera.io/library/bwa_htslib_samtools:83b50ff84ead50d0' }"
input:
- tuple val(meta) , path(reads)
@@ -17,6 +17,5 @@ Changes in 'bwa/mem/main.nf':
output:
'modules/nf-core/bwa/mem/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/bwa/mem/tests/tags.yml' is unchanged
'modules/nf-core/bwa/mem/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/bwamem2/mem/bwamem2-mem.diff b/modules/nf-core/bwamem2/mem/bwamem2-mem.diff
index 7c300098..37262b6f 100644
--- a/modules/nf-core/bwamem2/mem/bwamem2-mem.diff
+++ b/modules/nf-core/bwamem2/mem/bwamem2-mem.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/bwamem2/mem'
+Changes in component 'nf-core/bwamem2/mem'
'modules/nf-core/bwamem2/mem/environment.yml' is unchanged
'modules/nf-core/bwamem2/mem/meta.yml' is unchanged
Changes in 'bwamem2/mem/main.nf':
--- modules/nf-core/bwamem2/mem/main.nf
+++ modules/nf-core/bwamem2/mem/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/mulled-v2-e5d375990341c5aef3c9aff74f96f66f65375ef6:2d15960ccea84e249a150b7f5d4db3a42fc2d6c3-0' }"
+ 'community.wave.seqera.io/library/bwa-mem2_htslib_samtools:db98f81f55b64113' }"
input:
- tuple val(meta), path(reads)
@@ -17,6 +17,5 @@ Changes in 'bwamem2/mem/main.nf':
output:
'modules/nf-core/bwamem2/mem/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/bwamem2/mem/tests/tags.yml' is unchanged
'modules/nf-core/bwamem2/mem/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/dragmap/align/dragmap-align.diff b/modules/nf-core/dragmap/align/dragmap-align.diff
index 60188aab..cf4c75e6 100644
--- a/modules/nf-core/dragmap/align/dragmap-align.diff
+++ b/modules/nf-core/dragmap/align/dragmap-align.diff
@@ -1,22 +1,23 @@
-Changes in module 'nf-core/dragmap/align'
+Changes in component 'nf-core/dragmap/align'
'modules/nf-core/dragmap/align/environment.yml' is unchanged
'modules/nf-core/dragmap/align/meta.yml' is unchanged
Changes in 'dragmap/align/main.nf':
--- modules/nf-core/dragmap/align/main.nf
+++ modules/nf-core/dragmap/align/main.nf
-@@ -8,9 +8,7 @@
- 'biocontainers/mulled-v2-580d344d9d4a496cd403932da8765f9e0187774d:7eed251370ac7f3537c3d9472cdb2f9f5d8da1c5-0' }"
+@@ -9,10 +9,8 @@
+ : 'biocontainers/mulled-v2-580d344d9d4a496cd403932da8765f9e0187774d:df80ed8d23d0a2c43181a2b3dd1b39f2d00fab5c-0'}"
input:
-- tuple val(meta) , path(reads)
+- tuple val(meta), path(reads)
- tuple val(meta2), path(hashmap)
- tuple val(meta3), path(fasta)
+- val sort_bam
+ tuple val(meta) , path(reads), path(hashmap), path(fasta)
- val sort_bam
++ val sort_bam
output:
+ tuple val(meta), path("*.sam"), emit: sam, optional: true
'modules/nf-core/dragmap/align/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/dragmap/align/tests/tags.yml' is unchanged
'modules/nf-core/dragmap/align/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/fastp/fastp.diff b/modules/nf-core/fastp/fastp.diff
deleted file mode 100644
index 266c00b1..00000000
--- a/modules/nf-core/fastp/fastp.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-Changes in module 'nf-core/fastp'
-'modules/nf-core/fastp/environment.yml' is unchanged
-'modules/nf-core/fastp/meta.yml' is unchanged
-Changes in 'fastp/main.nf':
---- modules/nf-core/fastp/main.nf
-+++ modules/nf-core/fastp/main.nf
-@@ -92,7 +92,6 @@
- $fail_fastq \\
- $merge_fastq \\
- --thread $task.cpus \\
-- --detect_adapter_for_pe \\
- $args \\
- 2> >(tee ${prefix}.fastp.log >&2)
-
-
-'modules/nf-core/fastp/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/fastp/tests/tags.yml' is unchanged
-'modules/nf-core/fastp/tests/main.nf.test' is unchanged
-'modules/nf-core/fastp/tests/nextflow.save_failed.config' is unchanged
-'modules/nf-core/fastp/tests/nextflow.interleaved.config' is unchanged
-************************************************************
diff --git a/modules/nf-core/mosdepth/mosdepth.diff b/modules/nf-core/mosdepth/mosdepth.diff
index 53e32f2b..59a3adf0 100644
--- a/modules/nf-core/mosdepth/mosdepth.diff
+++ b/modules/nf-core/mosdepth/mosdepth.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/mosdepth'
+Changes in component 'nf-core/mosdepth'
'modules/nf-core/mosdepth/environment.yml' is unchanged
'modules/nf-core/mosdepth/meta.yml' is unchanged
Changes in 'mosdepth/main.nf':
--- modules/nf-core/mosdepth/main.nf
+++ modules/nf-core/mosdepth/main.nf
@@ -8,8 +8,7 @@
- 'biocontainers/mosdepth:0.3.8--hd299d5a_0'}"
+ 'community.wave.seqera.io/library/mosdepth_htslib:0f58993cb6d93294'}"
input:
- tuple val(meta), path(bam), path(bai), path(bed)
@@ -18,7 +18,6 @@ Changes in 'mosdepth/main.nf':
'modules/nf-core/mosdepth/tests/main.nf.test.snap' is unchanged
'modules/nf-core/mosdepth/tests/threshold.config' is unchanged
'modules/nf-core/mosdepth/tests/quantized.config' is unchanged
-'modules/nf-core/mosdepth/tests/tags.yml' is unchanged
'modules/nf-core/mosdepth/tests/main.nf.test' is unchanged
'modules/nf-core/mosdepth/tests/window.config' is unchanged
************************************************************
diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf
index 3a51548f..a1dc56d8 100644
--- a/modules/nf-core/picard/collecthsmetrics/main.nf
+++ b/modules/nf-core/picard/collecthsmetrics/main.nf
@@ -20,7 +20,7 @@ process PICARD_COLLECTHSMETRICS {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
- def reference = ref ? "--REFERENCE_SEQUENCE ${ref}" : ""
+ def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
def avail_mem = 3072
if (!task.memory) {
@@ -33,14 +33,14 @@ process PICARD_COLLECTHSMETRICS {
def bait_intervallist_cmd = ""
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 ."
}
def target_interval_list = target_intervals
def target_intervallist_cmd = ""
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 ."
}
diff --git a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
index 951f60dc..5907d093 100644
--- a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
+++ b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
@@ -1,23 +1,49 @@
-Changes in module 'nf-core/picard/collecthsmetrics'
+Changes in component 'nf-core/picard/collecthsmetrics'
'modules/nf-core/picard/collecthsmetrics/environment.yml' is unchanged
'modules/nf-core/picard/collecthsmetrics/meta.yml' is unchanged
Changes in 'picard/collecthsmetrics/main.nf':
--- modules/nf-core/picard/collecthsmetrics/main.nf
+++ modules/nf-core/picard/collecthsmetrics/main.nf
-@@ -8,10 +8,7 @@
- 'biocontainers/picard:3.3.0--hdfd78af_0' }"
+@@ -8,11 +8,7 @@
+ '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(fasta)
-- tuple val(meta3), path(fai)
-- tuple val(meta4), path(dict)
+- 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(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
+@@ -24,7 +20,7 @@
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+- def reference = ref ? "--REFERENCE_SEQUENCE ${ref}" : ""
++ def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
+
+ def avail_mem = 3072
+ if (!task.memory) {
+@@ -37,14 +33,14 @@
+ def bait_intervallist_cmd = ""
+ 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 ."
+ }
+
+ def target_interval_list = target_intervals
+ def target_intervallist_cmd = ""
+ 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 ."
+ }
+
+
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/picard/collecthsmetrics/tests/tags.yml' is unchanged
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
index 6c796d52..489076fb 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
+++ b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/picard/collectmultiplemetrics'
+Changes in component 'nf-core/picard/collectmultiplemetrics'
'modules/nf-core/picard/collectmultiplemetrics/environment.yml' is unchanged
'modules/nf-core/picard/collectmultiplemetrics/meta.yml' is unchanged
Changes in 'picard/collectmultiplemetrics/main.nf':
--- modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/picard:3.3.0--hdfd78af_0' }"
+ 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }"
input:
- tuple val(meta) , path(bam), path(bai)
diff --git a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
index 98d4a1eb..bf843c60 100644
--- a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
+++ b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/picard/collectwgsmetrics'
+Changes in component 'nf-core/picard/collectwgsmetrics'
'modules/nf-core/picard/collectwgsmetrics/environment.yml' is unchanged
'modules/nf-core/picard/collectwgsmetrics/meta.yml' is unchanged
Changes in 'picard/collectwgsmetrics/main.nf':
--- modules/nf-core/picard/collectwgsmetrics/main.nf
+++ modules/nf-core/picard/collectwgsmetrics/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/picard:3.3.0--hdfd78af_0' }"
+ 'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }"
input:
- tuple val(meta), path(bam), path(bai)
diff --git a/modules/nf-core/samtools/convert/samtools-convert.diff b/modules/nf-core/samtools/convert/samtools-convert.diff
index 67617c31..bd28d5da 100644
--- a/modules/nf-core/samtools/convert/samtools-convert.diff
+++ b/modules/nf-core/samtools/convert/samtools-convert.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/samtools/convert'
+Changes in component 'nf-core/samtools/convert'
'modules/nf-core/samtools/convert/environment.yml' is unchanged
'modules/nf-core/samtools/convert/meta.yml' is unchanged
Changes in 'samtools/convert/main.nf':
--- modules/nf-core/samtools/convert/main.nf
+++ modules/nf-core/samtools/convert/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(index)
@@ -17,6 +17,5 @@ Changes in 'samtools/convert/main.nf':
tuple val(meta), path("*.bam") , emit: bam , optional: true
'modules/nf-core/samtools/convert/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/samtools/convert/tests/tags.yml' is unchanged
'modules/nf-core/samtools/convert/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/samtools/coverage/samtools-coverage.diff b/modules/nf-core/samtools/coverage/samtools-coverage.diff
index 3b0e1f03..5dbbbd9e 100644
--- a/modules/nf-core/samtools/coverage/samtools-coverage.diff
+++ b/modules/nf-core/samtools/coverage/samtools-coverage.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/samtools/coverage'
+Changes in component 'nf-core/samtools/coverage'
'modules/nf-core/samtools/coverage/environment.yml' is unchanged
'modules/nf-core/samtools/coverage/meta.yml' is unchanged
Changes in 'samtools/coverage/main.nf':
--- modules/nf-core/samtools/coverage/main.nf
+++ modules/nf-core/samtools/coverage/main.nf
@@ -8,9 +8,7 @@
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(input_index)
@@ -17,6 +17,5 @@ Changes in 'samtools/coverage/main.nf':
tuple val(meta), path("*.txt"), emit: coverage
'modules/nf-core/samtools/coverage/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/samtools/coverage/tests/tags.yml' is unchanged
'modules/nf-core/samtools/coverage/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/samtools/sormadup/samtools-sormadup.diff b/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
index 6da27c02..f614f937 100644
--- a/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
+++ b/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/samtools/sormadup'
+Changes in component 'nf-core/samtools/sormadup'
'modules/nf-core/samtools/sormadup/environment.yml' is unchanged
'modules/nf-core/samtools/sormadup/meta.yml' is unchanged
Changes in 'samtools/sormadup/main.nf':
--- modules/nf-core/samtools/sormadup/main.nf
+++ modules/nf-core/samtools/sormadup/main.nf
@@ -8,8 +8,7 @@
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input)
@@ -17,7 +17,6 @@ Changes in 'samtools/sormadup/main.nf':
'modules/nf-core/samtools/sormadup/tests/main.nf.test.snap' is unchanged
'modules/nf-core/samtools/sormadup/tests/bam.config' is unchanged
-'modules/nf-core/samtools/sormadup/tests/tags.yml' is unchanged
'modules/nf-core/samtools/sormadup/tests/cram.config' is unchanged
'modules/nf-core/samtools/sormadup/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/samtools/sort/main.nf b/modules/nf-core/samtools/sort/main.nf
index 7b83e4a1..4abb5f3c 100644
--- a/modules/nf-core/samtools/sort/main.nf
+++ b/modules/nf-core/samtools/sort/main.nf
@@ -9,6 +9,7 @@ process SAMTOOLS_SORT {
input:
tuple val(meta) , path(bam), path(fasta)
+ val index_format
output:
tuple val(meta), path("${prefix}.bam"), emit: bam, optional: true
diff --git a/modules/nf-core/samtools/sort/samtools-sort.diff b/modules/nf-core/samtools/sort/samtools-sort.diff
index 817f68c5..a7a10b78 100644
--- a/modules/nf-core/samtools/sort/samtools-sort.diff
+++ b/modules/nf-core/samtools/sort/samtools-sort.diff
@@ -1,39 +1,37 @@
-Changes in module 'nf-core/samtools/sort'
+Changes in component 'nf-core/samtools/sort'
'modules/nf-core/samtools/sort/environment.yml' is unchanged
'modules/nf-core/samtools/sort/meta.yml' is unchanged
Changes in 'samtools/sort/main.nf':
--- modules/nf-core/samtools/sort/main.nf
+++ modules/nf-core/samtools/sort/main.nf
@@ -8,8 +8,7 @@
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta) , path(bam)
- tuple val(meta2), path(fasta)
+ tuple val(meta) , path(bam), path(fasta)
+ val index_format
output:
- tuple val(meta), path("*.bam"), emit: bam, optional: true
-
-@@ -28,6 +27,7 @@
- args.contains("--output-fmt cram") ? "cram" :
- "bam"
+@@ -31,6 +30,7 @@
+ args.contains("--output-fmt cram") ? "cram" :
+ "bam"
def reference = fasta ? "--reference ${fasta}" : ""
+ def sort_memory = (task.memory.mega/task.cpus*0.75).intValue()
- if ("$bam" == "${prefix}.bam") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
-
- """
-@@ -39,6 +39,7 @@
+ output_file = index_format ? "${prefix}.${extension}##idx##${prefix}.${extension}.${index_format} --write-index" : "${prefix}.${extension}"
+ if (index_format) {
+ if (!index_format.matches('bai|csi|crai')) {
+@@ -50,6 +50,7 @@
-T ${prefix} \\
--threads $task.cpus \\
${reference} \\
+ -m ${sort_memory}M \\
- -o ${prefix}.${extension} \\
+ -o ${output_file} \\
-
'modules/nf-core/samtools/sort/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/samtools/sort/tests/tags.yml' is unchanged
'modules/nf-core/samtools/sort/tests/nextflow_cram.config' is unchanged
'modules/nf-core/samtools/sort/tests/nextflow.config' is unchanged
'modules/nf-core/samtools/sort/tests/main.nf.test' is unchanged
diff --git a/modules/nf-core/samtools/stats/samtools-stats.diff b/modules/nf-core/samtools/stats/samtools-stats.diff
index dc243ad7..1ccaf8fe 100644
--- a/modules/nf-core/samtools/stats/samtools-stats.diff
+++ b/modules/nf-core/samtools/stats/samtools-stats.diff
@@ -1,11 +1,11 @@
-Changes in module 'nf-core/samtools/stats'
+Changes in component 'nf-core/samtools/stats'
'modules/nf-core/samtools/stats/environment.yml' is unchanged
'modules/nf-core/samtools/stats/meta.yml' is unchanged
Changes in 'samtools/stats/main.nf':
--- modules/nf-core/samtools/stats/main.nf
+++ modules/nf-core/samtools/stats/main.nf
@@ -8,8 +8,7 @@
- 'biocontainers/samtools:1.21--h50ea8bc_0' }"
+ 'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(input_index)
@@ -16,6 +16,5 @@ Changes in 'samtools/stats/main.nf':
tuple val(meta), path("*.stats"), emit: stats
'modules/nf-core/samtools/stats/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/samtools/stats/tests/tags.yml' is unchanged
'modules/nf-core/samtools/stats/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/snapaligner/align/snapaligner-align.diff b/modules/nf-core/snapaligner/align/snapaligner-align.diff
index f6f326aa..34d23cd4 100644
--- a/modules/nf-core/snapaligner/align/snapaligner-align.diff
+++ b/modules/nf-core/snapaligner/align/snapaligner-align.diff
@@ -5,7 +5,7 @@ Changes in 'snapaligner/align/main.nf':
--- modules/nf-core/snapaligner/align/main.nf
+++ modules/nf-core/snapaligner/align/main.nf
@@ -8,8 +8,7 @@
- 'biocontainers/snap-aligner:2.0.3--hd03093a_0' }"
+ 'community.wave.seqera.io/library/snap-aligner:2.0.5--23601d3a3a2ae452' }"
input:
- tuple val(meta) , path(reads, stageAs: "?/*")
diff --git a/modules/nf-core/star/align/star-align.diff b/modules/nf-core/star/align/star-align.diff
index 019f65d6..398da009 100644
--- a/modules/nf-core/star/align/star-align.diff
+++ b/modules/nf-core/star/align/star-align.diff
@@ -1,4 +1,6 @@
Changes in component 'nf-core/star/align'
+'modules/nf-core/star/align/environment.yml' is unchanged
+'modules/nf-core/star/align/meta.yml' is unchanged
Changes in 'star/align/main.nf':
--- modules/nf-core/star/align/main.nf
+++ modules/nf-core/star/align/main.nf
@@ -24,11 +26,9 @@ Changes in 'star/align/main.nf':
def seq_center_arg = seq_center ? "'CN:$seq_center'" : ""
attrRG = args.contains("--outSAMattrRGline") ? "" : "--outSAMattrRGline 'ID:$prefix' $seq_center_arg 'SM:$prefix' $seq_platform_arg"
-'modules/nf-core/star/align/environment.yml' is unchanged
-'modules/nf-core/star/align/meta.yml' is unchanged
-'modules/nf-core/star/align/tests/nextflow.starfusion.config' is unchanged
-'modules/nf-core/star/align/tests/main.nf.test' is unchanged
-'modules/nf-core/star/align/tests/nextflow.arriba.config' is unchanged
'modules/nf-core/star/align/tests/main.nf.test.snap' is unchanged
+'modules/nf-core/star/align/tests/nextflow.arriba.config' is unchanged
+'modules/nf-core/star/align/tests/nextflow.starfusion.config' is unchanged
'modules/nf-core/star/align/tests/nextflow.config' is unchanged
+'modules/nf-core/star/align/tests/main.nf.test' is unchanged
************************************************************
diff --git a/modules/nf-core/strobealign/strobealign.diff b/modules/nf-core/strobealign/strobealign.diff
new file mode 100644
index 00000000..2e5880dd
--- /dev/null
+++ b/modules/nf-core/strobealign/strobealign.diff
@@ -0,0 +1,22 @@
+Changes in component 'nf-core/strobealign'
+'modules/nf-core/strobealign/environment.yml' is unchanged
+'modules/nf-core/strobealign/meta.yml' is unchanged
+Changes in 'strobealign/main.nf':
+--- modules/nf-core/strobealign/main.nf
++++ modules/nf-core/strobealign/main.nf
+@@ -8,9 +8,7 @@
+ 'community.wave.seqera.io/library/htslib_samtools_strobealign_pigz:4fa4f439c6bea386' }"
+
+ input:
+- tuple val(meta) , path(reads)
+- tuple val(meta2), path(fasta)
+- tuple val(meta3), path(index)
++ tuple val(meta) , path(reads), path(fasta), path(index)
+ val sort_bam
+
+ output:
+
+'modules/nf-core/strobealign/tests/main.nf.test.snap' is unchanged
+'modules/nf-core/strobealign/tests/nextflow.config' is unchanged
+'modules/nf-core/strobealign/tests/main.nf.test' is unchanged
+************************************************************
diff --git a/subworkflows/local/bam_qc/meta.yml b/subworkflows/local/bam_qc/meta.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/subworkflows/local/coverage/meta.yml b/subworkflows/local/coverage/meta.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/subworkflows/local/fastq_align_rna/meta.yml b/subworkflows/local/fastq_align_rna/meta.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/subworkflows/local/fastq_to_aligned_cram/meta.yml b/subworkflows/local/fastq_to_aligned_cram/meta.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/subworkflows/local/fastq_to_unaligned_cram/meta.yml b/subworkflows/local/fastq_to_unaligned_cram/meta.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/subworkflows/local/utils_nfcore_preprocessing_pipeline/meta.yml b/subworkflows/local/utils_nfcore_preprocessing_pipeline/meta.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
index 2f30e9a4..bfd25876 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
@@ -98,7 +98,7 @@ def workflowVersionToYAML() {
// Get channel of software versions used in pipeline in YAML format
//
def softwareVersionsToYAML(ch_versions) {
- return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML()))
+ return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML()))
}
//
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff b/subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff
new file mode 100644
index 00000000..38096acc
--- /dev/null
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff
@@ -0,0 +1,21 @@
+Changes in component 'nf-core/utils_nfcore_pipeline'
+'subworkflows/nf-core/utils_nfcore_pipeline/meta.yml' is unchanged
+Changes in 'utils_nfcore_pipeline/main.nf':
+--- subworkflows/nf-core/utils_nfcore_pipeline/main.nf
++++ subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+@@ -98,7 +98,7 @@
+ // Get channel of software versions used in pipeline in YAML format
+ //
+ def softwareVersionsToYAML(ch_versions) {
+- return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML()))
++ return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML()))
+ }
+
+ //
+
+'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test' is unchanged
+'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap' is unchanged
+'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap' is unchanged
+'subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config' is unchanged
+'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test' is unchanged
+************************************************************
From 3f9cc7cef00e198146b9d0f9724a7b15068d647d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 12:25:27 +0100
Subject: [PATCH 062/228] re-add analysis profiles
---
nextflow.config | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/nextflow.config b/nextflow.config
index a7453b62..01378b19 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -185,6 +185,12 @@ profiles {
}
test { includeConfig 'conf/test.config' }
test_full { includeConfig 'conf/test_full.config' }
+ s3_ugent { includeConfig 'conf/profiles/s3_ugent.config' }
+ // analysis profiles
+ sWGS { includeConfig 'conf/profiles/sWGS.config' }
+ WGS { includeConfig 'conf/profiles/WGS.config' }
+ WES { includeConfig 'conf/profiles/WES.config' }
+ copgt { includeConfig 'conf/profiles/copgt.config' }
}
// Load nf-core custom profiles from different institutions
From ef8d686b45c2230ebfd21f84c3b2eff78fee06ab Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 12:55:17 +0100
Subject: [PATCH 063/228] set cram output to v3 to ensure downstream
compatibility
---
conf/modules.config | 8 ++++----
subworkflows/local/bam_qc/main.nf | 1 -
workflows/preprocessing.nf | 26 ++++++++++++++++++++++++++
3 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index acb7eefc..56bf31d1 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -48,7 +48,7 @@ process {
ext.args = {
[
meta.readgroup ? "--rg-line \"@RG\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\t") + "\"" : "",
- "--output-fmt cram",
+ "--output-fmt cram,version=3.0",
"--output-fmt-option archive",
].join(" ").trim()
}
@@ -153,7 +153,7 @@ process {
"-d 2500",
params.umi_aware ? "--barcode-name" : "",
"--write-index",
- "--output-fmt cram",
+ "--output-fmt cram,version=3.0",
"--output-fmt-option archive",
].join(" ").trim()
}
@@ -165,7 +165,7 @@ process {
ext.args = {
[
"--write-index",
- "--output-fmt cram",
+ "--output-fmt cram,version=3.0",
"--output-fmt-option archive",
].join(" ").trim()
}
@@ -190,7 +190,7 @@ process {
ext.args = {
[
"-C",
- "--output-fmt cram",
+ "--output-fmt cram,version=3.0",
"--output-fmt-option archive",
].join(" ").trim()
}
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index bd2cc469..e35555a8 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -23,7 +23,6 @@ workflow BAM_QC {
.set { ch_bam_bai_fasta }
SAMTOOLS_STATS(ch_bam_bai_fasta)
- ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first())
ch_bam_bai_fasta
.map { meta, bam, bai, _fasta ->
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 48c7b0d1..f90dd2eb 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -446,6 +446,32 @@ workflow PREPROCESSING {
//
// Collate and save software versions
//
+ def topic_versions = Channel.topic("versions")
+ .distinct()
+ .branch { entry ->
+ versions_file: entry instanceof Path
+ versions_tuple: true
+ }
+
+ def topic_versions_string = topic_versions.versions_tuple
+ .map { process, tool, version ->
+ [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
+ }
+ .groupTuple(by:0)
+ .map { process, tool_versions ->
+ tool_versions.unique().sort()
+ "${process}:\n${tool_versions.join('\n')}"
+ }
+
+ softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))
+ .mix(topic_versions_string)
+ .collectFile(
+ storeDir: "${params.outdir}/pipeline_info",
+ name: 'nf_cmgg_preprocessing_software_mqc_versions.yml',
+ sort: true,
+ newLine: true
+ ).set { ch_collated_versions }
+
softwareVersionsToYAML(ch_versions)
.collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'preprocessing_software_mqc_versions.yml', sort: true, newLine: true)
.set { ch_collated_versions }
From 915702a421b8202fc37aa7f48218d862e83c9697 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 12:55:54 +0100
Subject: [PATCH 064/228] bump subwf
---
modules.json | 5 ++---
.../utils_nfcore_pipeline.diff | 21 -------------------
2 files changed, 2 insertions(+), 24 deletions(-)
delete mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff
diff --git a/modules.json b/modules.json
index d3c15c5a..f5872c3f 100644
--- a/modules.json
+++ b/modules.json
@@ -174,9 +174,8 @@
},
"utils_nfcore_pipeline": {
"branch": "master",
- "git_sha": "271e7fc14eb1320364416d996fb077421f3faed2",
- "installed_by": ["subworkflows"],
- "patch": "subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff"
+ "git_sha": "df4d1c8cdee98a1bbbed8fc51e82296568e0f9c1",
+ "installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff b/subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff
deleted file mode 100644
index 38096acc..00000000
--- a/subworkflows/nf-core/utils_nfcore_pipeline/utils_nfcore_pipeline.diff
+++ /dev/null
@@ -1,21 +0,0 @@
-Changes in component 'nf-core/utils_nfcore_pipeline'
-'subworkflows/nf-core/utils_nfcore_pipeline/meta.yml' is unchanged
-Changes in 'utils_nfcore_pipeline/main.nf':
---- subworkflows/nf-core/utils_nfcore_pipeline/main.nf
-+++ subworkflows/nf-core/utils_nfcore_pipeline/main.nf
-@@ -98,7 +98,7 @@
- // Get channel of software versions used in pipeline in YAML format
- //
- def softwareVersionsToYAML(ch_versions) {
-- return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML()))
-+ return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML()))
- }
-
- //
-
-'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test' is unchanged
-'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test.snap' is unchanged
-'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.function.nf.test.snap' is unchanged
-'subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config' is unchanged
-'subworkflows/nf-core/utils_nfcore_pipeline/tests/main.workflow.nf.test' is unchanged
-************************************************************
From 05707f513829df79851980d7edded46dad1e6d77 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 13:26:41 +0100
Subject: [PATCH 065/228] fix snapshots
---
.../local/bam_qc/main.nf.test.snap | 47 +++++-----
.../local/coverage/main.nf.test.snap | 36 ++++----
.../fastq_to_aligned_cram/main.nf.test.snap | 36 ++++----
.../fastq_to_unaligned_cram/main.nf.test.snap | 10 +-
tests/workflows/preprocessing.nf.test.snap | 91 +++++++++----------
5 files changed, 107 insertions(+), 113 deletions(-)
diff --git a/tests/subworkflows/local/bam_qc/main.nf.test.snap b/tests/subworkflows/local/bam_qc/main.nf.test.snap
index daa07dff..2403cda0 100644
--- a/tests/subworkflows/local/bam_qc/main.nf.test.snap
+++ b/tests/subworkflows/local/bam_qc/main.nf.test.snap
@@ -68,23 +68,22 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,18292ec37f6ff9eff458683e3abf638b"
+ "test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
],
"versions": [
- "versions.yml:md5,1e3d06d4435935cb6c01c1d94dad41c3",
- "versions.yml:md5,25efd393aac661d8cb2aa8669127abac",
- "versions.yml:md5,28cad528cb128dd7bdad050758f1801c",
- "versions.yml:md5,ebcad29c0749995f2306fbcf31b03c8c",
- "versions.yml:md5,ff0b9222ca016f9d2a7fa1d24010eccf"
+ "versions.yml:md5,15389a9f97668f320b9628da1903a93b",
+ "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5",
+ "versions.yml:md5,593804078c060457d011f7f6b650e500",
+ "versions.yml:md5,f5507938ec419f55239e3faa9f99376f"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:17:45.293786329"
+ "timestamp": "2025-12-02T12:48:55.096074"
},
"Bam QC - Samtools": {
"content": [
@@ -125,21 +124,20 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,18292ec37f6ff9eff458683e3abf638b"
+ "test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
],
"versions": [
- "versions.yml:md5,1e3d06d4435935cb6c01c1d94dad41c3",
- "versions.yml:md5,28cad528cb128dd7bdad050758f1801c",
- "versions.yml:md5,ff0b9222ca016f9d2a7fa1d24010eccf"
+ "versions.yml:md5,15389a9f97668f320b9628da1903a93b",
+ "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:19:09.897986912"
+ "timestamp": "2025-12-02T12:50:04.027873"
},
"Bam QC - WGSmetrics": {
"content": [
@@ -210,22 +208,21 @@
"id": "test",
"single_end": false
},
- "test.stats:md5,18292ec37f6ff9eff458683e3abf638b"
+ "test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
],
"versions": [
- "versions.yml:md5,1e3d06d4435935cb6c01c1d94dad41c3",
- "versions.yml:md5,25efd393aac661d8cb2aa8669127abac",
- "versions.yml:md5,28cad528cb128dd7bdad050758f1801c",
- "versions.yml:md5,5da695471744af2707c6864e2773aa27",
- "versions.yml:md5,ff0b9222ca016f9d2a7fa1d24010eccf"
+ "versions.yml:md5,15389a9f97668f320b9628da1903a93b",
+ "versions.yml:md5,3d2d9acb75406ea94b547be23a45601b",
+ "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5",
+ "versions.yml:md5,f5507938ec419f55239e3faa9f99376f"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:18:47.271352687"
+ "timestamp": "2025-12-02T12:49:52.298773"
}
}
\ No newline at end of file
diff --git a/tests/subworkflows/local/coverage/main.nf.test.snap b/tests/subworkflows/local/coverage/main.nf.test.snap
index 7c779621..2891b942 100644
--- a/tests/subworkflows/local/coverage/main.nf.test.snap
+++ b/tests/subworkflows/local/coverage/main.nf.test.snap
@@ -49,9 +49,9 @@
]
],
"14": [
- "versions.yml:md5,2d22ebfca674911d28ac60f352a98b1b",
+ "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
"versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
- "versions.yml:md5,d7c2bc4717e6518d6ce017a70a3f1df0"
+ "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
],
"2": [
[
@@ -123,7 +123,7 @@
"single_end": false,
"tag": "WES"
},
- "test.quantized.bed.gz.csi:md5,39f0a425a3f11134e247141c0890fa89"
+ "test.quantized.bed.gz.csi:md5,22e9d1096b7afd3d628526c831b26397"
]
],
"mosdepth_global": [
@@ -176,7 +176,7 @@
"single_end": false,
"tag": "WES"
},
- "test.quantized.bed.gz.csi:md5,39f0a425a3f11134e247141c0890fa89"
+ "test.quantized.bed.gz.csi:md5,22e9d1096b7afd3d628526c831b26397"
]
],
"mosdepth_regions": [
@@ -246,17 +246,17 @@
]
],
"versions": [
- "versions.yml:md5,2d22ebfca674911d28ac60f352a98b1b",
+ "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
"versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
- "versions.yml:md5,d7c2bc4717e6518d6ce017a70a3f1df0"
+ "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:20:02.213734734"
+ "timestamp": "2025-12-02T12:34:24.897893"
},
"Coverage - seqcap": {
"content": [
@@ -301,8 +301,8 @@
],
"14": [
- "versions.yml:md5,2d22ebfca674911d28ac60f352a98b1b",
- "versions.yml:md5,d7c2bc4717e6518d6ce017a70a3f1df0"
+ "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
+ "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
],
"2": [
[
@@ -374,7 +374,7 @@
"single_end": false,
"tag": "seqcap"
},
- "test.quantized.bed.gz.csi:md5,39f0a425a3f11134e247141c0890fa89"
+ "test.quantized.bed.gz.csi:md5,22e9d1096b7afd3d628526c831b26397"
]
],
"mosdepth_global": [
@@ -427,7 +427,7 @@
"single_end": false,
"tag": "seqcap"
},
- "test.quantized.bed.gz.csi:md5,39f0a425a3f11134e247141c0890fa89"
+ "test.quantized.bed.gz.csi:md5,22e9d1096b7afd3d628526c831b26397"
]
],
"mosdepth_regions": [
@@ -490,15 +490,15 @@
]
],
"versions": [
- "versions.yml:md5,2d22ebfca674911d28ac60f352a98b1b",
- "versions.yml:md5,d7c2bc4717e6518d6ce017a70a3f1df0"
+ "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
+ "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:19:32.672589279"
+ "timestamp": "2025-12-02T12:34:05.200571"
}
}
\ No newline at end of file
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index bcaa1414..50296e7d 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -84,18 +84,18 @@
]
],
"versions": [
- "versions.yml:md5,7e9be834e78aaf958ee23618377d8da5",
- "versions.yml:md5,d8544811f6b511ef45e9c3547430a30d",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233"
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
+ "versions.yml:md5,9598e8236a8fbab0f6745715fa0de9d3",
+ "versions.yml:md5,d8544811f6b511ef45e9c3547430a30d"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:24:09.28415088"
+ "timestamp": "2025-12-02T12:52:20.737608"
},
"fastq to cram - bwa - samtools sormadup": {
"content": [
@@ -137,21 +137,21 @@
}
}
},
- "test.merged.metrics:md5,6e4d03a56877997e0e035d267550e381"
+ "test.merged.metrics:md5,a4129081c3f2f10e6f6ecdf8b1c44852"
]
],
"versions": [
- "versions.yml:md5,7d966b1716b0f134534741313257f0ec",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233"
+ "versions.yml:md5,53fb2eac4cab0b817e852418eb0ba719",
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:28:32.155644934"
+ "timestamp": "2025-12-02T13:04:47.356008"
},
"fastq to cram - star - bamsormadup": {
"content": [
@@ -197,16 +197,16 @@
]
],
"versions": [
- "versions.yml:md5,7e9be834e78aaf958ee23618377d8da5",
+ "versions.yml:md5,9598e8236a8fbab0f6745715fa0de9d3",
"versions.yml:md5,d8544811f6b511ef45e9c3547430a30d"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:27:31.44516813"
+ "timestamp": "2025-12-02T13:04:21.082358"
},
"fastq to cram - bwa - samtools sort": {
"content": [
diff --git a/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap
index 3dfdcb8b..39fd0d73 100644
--- a/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap
@@ -16,15 +16,15 @@
]
],
"versions": [
- "versions.yml:md5,422c9b3605121c3528ee755bbdb12a85",
- "versions.yml:md5,f494e9f15ef064e11d31abca2f2ba51c"
+ "versions.yml:md5,7d0123b33defe52fceb94bd95f802978",
+ "versions.yml:md5,f253e859e7aa43e34481f5493c4e847b"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:30:55.301756415"
+ "timestamp": "2025-12-02T13:05:20.48603"
}
}
\ No newline at end of file
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 36fadad2..348c1fd2 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -102,7 +102,7 @@
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
- "sample1.fastp.json:md5,543fb8fe4512975ce7dafd5287cae601"
+ "sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
]
],
"md5sums": [
@@ -261,7 +261,7 @@
"id": "sample1"
}
},
- "sample1.quantized.bed.gz.csi:md5,ac24f9c737b984091364b3c5b1f45567"
+ "sample1.quantized.bed.gz.csi:md5,efa0455ec39b49b96fd44c1efcbef8ab"
]
],
"mosdepth_regions": [
@@ -580,7 +580,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,0653e8f1834d58c557ad463c36ae6b61"
+ "sample1.stats:md5,33a10d02ce404301e012f07841815f59"
]
],
"sormadup_metrics": [
@@ -613,27 +613,26 @@
],
"versions": [
- "versions.yml:md5,321e55c8f19102dc87a10e981635edda",
- "versions.yml:md5,3e9382a1dc62d4f405bcfb58fe6b7768",
- "versions.yml:md5,4445e842758f99d74d032eab0af01ff6",
- "versions.yml:md5,4445e842758f99d74d032eab0af01ff6",
- "versions.yml:md5,67e17554941666c3f3da7ab6e3b1ac5d",
- "versions.yml:md5,84a41fdb642c270c5f36846cd7d8f033",
- "versions.yml:md5,8ede2c6189fe1f73ef7e36b42528473c",
- "versions.yml:md5,a18197a27823760677276bdf9a17c0b6",
- "versions.yml:md5,bfc234edc6fd6d67600cac71c66ecd10",
+ "versions.yml:md5,02acae00818ba01a01e2bdb03b574343",
+ "versions.yml:md5,23b060bcc18a02fc8f981102ef3a3006",
+ "versions.yml:md5,31df076e5d21d61db772cb39643350e2",
+ "versions.yml:md5,b702df83d9ece54caa0e765a6286cdd2",
+ "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
+ "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
"versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d",
+ "versions.yml:md5,cdce7da7ce14e29fbd9fd72e88505ffa",
+ "versions.yml:md5,d00b52835d019d68e58aafd218429a75",
"versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868",
- "versions.yml:md5,ebdd9fe0c553612c66238375b920f178",
- "versions.yml:md5,fecf2763ae04725fa0ca7c995018dcea"
+ "versions.yml:md5,f567cdcfb384cc7a2d9ff4dc850f3bad",
+ "versions.yml:md5,fe9b8b3a8dc895efcf8f7c0b3248ff2d"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-21T14:24:42.558578431"
+ "timestamp": "2025-12-02T13:07:39.314799"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -738,7 +737,7 @@
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
- "sample1.fastp.json:md5,543fb8fe4512975ce7dafd5287cae601"
+ "sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
]
],
"md5sums": [
@@ -907,7 +906,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,0653e8f1834d58c557ad463c36ae6b61"
+ "sample1.stats:md5,33a10d02ce404301e012f07841815f59"
]
],
"sormadup_metrics": [
@@ -940,23 +939,22 @@
],
"versions": [
- "versions.yml:md5,321e55c8f19102dc87a10e981635edda",
- "versions.yml:md5,4445e842758f99d74d032eab0af01ff6",
- "versions.yml:md5,4445e842758f99d74d032eab0af01ff6",
- "versions.yml:md5,67e17554941666c3f3da7ab6e3b1ac5d",
- "versions.yml:md5,8ede2c6189fe1f73ef7e36b42528473c",
- "versions.yml:md5,a18197a27823760677276bdf9a17c0b6",
- "versions.yml:md5,bfc234edc6fd6d67600cac71c66ecd10",
+ "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
+ "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
"versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d",
- "versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868"
+ "versions.yml:md5,cdce7da7ce14e29fbd9fd72e88505ffa",
+ "versions.yml:md5,d00b52835d019d68e58aafd218429a75",
+ "versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868",
+ "versions.yml:md5,f567cdcfb384cc7a2d9ff4dc850f3bad",
+ "versions.yml:md5,fe9b8b3a8dc895efcf8f7c0b3248ff2d"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-21T14:29:48.196853611"
+ "timestamp": "2025-12-02T13:12:08.110112"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1058,7 +1056,7 @@
"aligner": "bwamem",
"count": 1
},
- "sample1.fastp.json:md5,543fb8fe4512975ce7dafd5287cae601"
+ "sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
]
],
"md5sums": [
@@ -1211,7 +1209,7 @@
"id": "sample1"
}
},
- "sample1.quantized.bed.gz.csi:md5,ac24f9c737b984091364b3c5b1f45567"
+ "sample1.quantized.bed.gz.csi:md5,efa0455ec39b49b96fd44c1efcbef8ab"
]
],
"mosdepth_regions": [
@@ -1453,7 +1451,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,0653e8f1834d58c557ad463c36ae6b61"
+ "sample1.stats:md5,33a10d02ce404301e012f07841815f59"
]
],
"sormadup_metrics": [
@@ -1485,26 +1483,25 @@
],
"versions": [
- "versions.yml:md5,2dbfdf50978986550dbe621f1d49fea7",
- "versions.yml:md5,321e55c8f19102dc87a10e981635edda",
- "versions.yml:md5,3e9382a1dc62d4f405bcfb58fe6b7768",
- "versions.yml:md5,4445e842758f99d74d032eab0af01ff6",
- "versions.yml:md5,4445e842758f99d74d032eab0af01ff6",
- "versions.yml:md5,67e17554941666c3f3da7ab6e3b1ac5d",
- "versions.yml:md5,84a41fdb642c270c5f36846cd7d8f033",
- "versions.yml:md5,8ede2c6189fe1f73ef7e36b42528473c",
- "versions.yml:md5,a18197a27823760677276bdf9a17c0b6",
- "versions.yml:md5,bfc234edc6fd6d67600cac71c66ecd10",
+ "versions.yml:md5,1d2a9b13790c70a69a1f62facc9b3a6c",
+ "versions.yml:md5,23b060bcc18a02fc8f981102ef3a3006",
+ "versions.yml:md5,31df076e5d21d61db772cb39643350e2",
+ "versions.yml:md5,b702df83d9ece54caa0e765a6286cdd2",
+ "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
+ "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
"versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d",
+ "versions.yml:md5,cdce7da7ce14e29fbd9fd72e88505ffa",
+ "versions.yml:md5,d00b52835d019d68e58aafd218429a75",
"versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868",
- "versions.yml:md5,fecf2763ae04725fa0ca7c995018dcea"
+ "versions.yml:md5,f567cdcfb384cc7a2d9ff4dc850f3bad",
+ "versions.yml:md5,fe9b8b3a8dc895efcf8f7c0b3248ff2d"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-21T14:28:06.35129428"
+ "timestamp": "2025-12-02T13:10:35.894317"
}
}
\ No newline at end of file
From 3677efd7c51980ec654751bf2614797bfa88dc77 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 13:37:54 +0100
Subject: [PATCH 066/228] drop githubworkflow since we have no bot
---
.../workflows/template-version-comment.yml | 46 -------------------
1 file changed, 46 deletions(-)
delete mode 100644 .github/workflows/template-version-comment.yml
diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml
deleted file mode 100644
index c5988af9..00000000
--- a/.github/workflows/template-version-comment.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: nf-core template version comment
-# This workflow is triggered on PRs to check if the pipeline template version matches the latest nf-core version.
-# It posts a comment to the PR, even if it comes from a fork.
-
-on: pull_request_target
-
-jobs:
- template_version:
- runs-on: ubuntu-latest
- steps:
- - name: Check out pipeline code
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- with:
- ref: ${{ github.event.pull_request.head.sha }}
-
- - name: Read template version from .nf-core.yml
- uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2
- id: read_yml
- with:
- config: ${{ github.workspace }}/.nf-core.yml
-
- - name: Install nf-core
- run: |
- python -m pip install --upgrade pip
- pip install nf-core==${{ steps.read_yml.outputs['nf_core_version'] }}
-
- - name: Check nf-core outdated
- id: nf_core_outdated
- run: echo "OUTPUT=$(pip list --outdated | grep nf-core)" >> ${GITHUB_ENV}
-
- - name: Post nf-core template version comment
- uses: mshick/add-pr-comment@b8f338c590a895d50bcbfa6c5859251edc8952fc # v2
- if: |
- contains(env.OUTPUT, 'nf-core')
- with:
- repo-token: ${{ secrets.NF_CORE_BOT_AUTH_TOKEN }}
- allow-repeats: false
- message: |
- > [!WARNING]
- > Newer version of the nf-core template is available.
- >
- > Your pipeline is using an old version of the nf-core template: ${{ steps.read_yml.outputs['nf_core_version'] }}.
- > Please update your pipeline to the latest version.
- >
- > For more documentation on how to update your pipeline, please see the [nf-core documentation](https://github.com/nf-core/tools?tab=readme-ov-file#sync-a-pipeline-with-the-template) and [Synchronisation documentation](https://nf-co.re/docs/contributing/sync).
- #
From ad890074a3848ce35087616fc0a20e2047b38c4b Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 13:47:25 +0100
Subject: [PATCH 067/228] fix test
---
.../local/fastq_to_aligned_cram/main.nf | 5 ++---
.../fastq_to_aligned_cram/main.nf.test.snap | 22 +++++++++----------
2 files changed, 12 insertions(+), 15 deletions(-)
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index 76ea8b63..c00f4d75 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -110,10 +110,9 @@ workflow FASTQ_TO_CRAM {
}
else if (markdup == "false" || markdup == false) {
// Merge bam files and compress
- // SAMTOOLS_SORT([meta, [bam, bam], fasta])
- SAMTOOLS_SORT(ch_bam_fasta)
+ // SAMTOOLS_SORT([meta, [bam, bam], fasta],index_format)
+ SAMTOOLS_SORT(ch_bam_fasta, "crai")
ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORT.out.cram.join(SAMTOOLS_SORT.out.crai, failOnMismatch: true, failOnDuplicate: true))
- ch_versions = ch_versions.mix(SAMTOOLS_SORT.out.versions.first())
}
else {
error("markdup: ${markdup} not supported")
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index 50296e7d..d1459def 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -28,17 +28,16 @@
],
"versions": [
- "versions.yml:md5,a7ccfeb53d42f57673ea59012c30e897",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233"
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:30:29.475396941"
+ "timestamp": "2025-12-02T13:40:29.319628"
},
"fastq to cram - bwa - bamsormadup": {
"content": [
@@ -237,16 +236,15 @@
],
"versions": [
- "versions.yml:md5,a7ccfeb53d42f57673ea59012c30e897",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233",
- "versions.yml:md5,d92f130d879deee51a23917c6e272233"
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
+ "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:29:30.443653387"
+ "timestamp": "2025-12-02T13:40:06.599667"
}
}
\ No newline at end of file
From f4490fc292ac4c2059193b4383b3eb52a967e3f9 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 19:42:20 +0100
Subject: [PATCH 068/228] try to fix bclconvert on GCP
---
conf/profiles/s3_ugent.config | 1 +
main.nf | 8 +++----
modules.json | 3 ++-
modules/nf-core/bclconvert/bclconvert.diff | 25 ++++++++++++++++++++++
modules/nf-core/bclconvert/main.nf | 4 ++--
5 files changed, 34 insertions(+), 7 deletions(-)
create mode 100644 modules/nf-core/bclconvert/bclconvert.diff
diff --git a/conf/profiles/s3_ugent.config b/conf/profiles/s3_ugent.config
index d29f80a0..7e2fe67a 100644
--- a/conf/profiles/s3_ugent.config
+++ b/conf/profiles/s3_ugent.config
@@ -1,4 +1,5 @@
aws {
+ profile = "ugent"
client {
endpoint = "https://s3.ugent.be"
protocol = "https"
diff --git a/main.nf b/main.nf
index ee3fa058..640ad840 100644
--- a/main.nf
+++ b/main.nf
@@ -66,8 +66,8 @@ workflow {
publish:
demultiplex_interop = PREPROCESSING.out.demultiplex_interop.transpose(by:1)
- demultiplex_reports = PREPROCESSING.out.demultiplex_reports.map { meta, reports -> [ meta, files("${reports.toUri()}/*") ] }.transpose(by:1)
- demultiplex_logs = PREPROCESSING.out.demultiplex_logs.map { meta, logs -> [ meta, files("${logs.toUri()}/*") ] }.transpose(by:1)
+ demultiplex_reports = PREPROCESSING.out.demultiplex_reports.transpose(by:1)
+ demultiplex_logs = PREPROCESSING.out.demultiplex_logs.transpose(by:1)
fastp_json = PREPROCESSING.out.fastp_json
fastp_html = PREPROCESSING.out.fastp_html
ucrams = PREPROCESSING.out.ucrams
@@ -107,11 +107,11 @@ output {
bin >> "Interop/${bin.name}"
} }
demultiplex_reports { path { meta, report ->
- def out_path = meta.lane ? "Reports/LOO${meta.lane}/${report.name}" as String : "Reports/${report.name}"
+ def out_path = meta.lane ? "Reports/L00${meta.lane}/${report.name}" as String : "Reports/${report.name}"
report >> out_path
} }
demultiplex_logs { path { meta, log ->
- def out_path = meta.lane ? "Logs/LOO${meta.lane}/${log.name}" as String : "Logs/${log.name}"
+ def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
log >> out_path
} }
fastp_json { path { meta, json ->
diff --git a/modules.json b/modules.json
index f5872c3f..f1b67967 100644
--- a/modules.json
+++ b/modules.json
@@ -13,7 +13,8 @@
"bclconvert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["bcl_demultiplex", "modules"]
+ "installed_by": ["bcl_demultiplex", "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..dc0dee2d
--- /dev/null
+++ b/modules/nf-core/bclconvert/bclconvert.diff
@@ -0,0 +1,25 @@
+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
+@@ -12,8 +12,8 @@
+ 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") , emit: reports
+- tuple val(meta), path("output/Logs") , 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
+ path("versions.yml") , emit: versions
+
+
+'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 82ad6b19..b61f2240 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") , emit: reports
- tuple val(meta), path("output/Logs") , 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
path("versions.yml") , emit: versions
From e192be17db11606ac9bff3dcd067fc34b764c6a6 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 09:34:38 +0100
Subject: [PATCH 069/228] update bcl-convert config for gcp
---
conf/modules.config | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 56bf31d1..85c1c3c0 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -14,13 +14,13 @@ process {
// BCL convert
withName: BCLCONVERT {
+ cpus = 32
+ memory = 64.GB
ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
"--force",
- "--bcl-num-parallel-tiles ${task.cpus}",
- "--bcl-num-conversion-threads ${task.cpus}",
- "--bcl-num-compression-threads ${task.cpus}",
+ "--strict",
].join(" ").trim()
}
}
From 2c24f7bb8b83ffc59347e7d6270a14f0fdae28c8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 09:48:05 +0100
Subject: [PATCH 070/228] add dynamic disk allocation
---
conf/modules.config | 1 +
1 file changed, 1 insertion(+)
diff --git a/conf/modules.config b/conf/modules.config
index 85c1c3c0..05b20842 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -16,6 +16,7 @@ process {
withName: BCLCONVERT {
cpus = 32
memory = 64.GB
+ disk = { 500.GB * task.attempt }
ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
From 2fcc5e77bada5848bb9f5f6c3fe977a7ad451177 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 10:17:19 +0100
Subject: [PATCH 071/228] increase mem
---
conf/modules.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conf/modules.config b/conf/modules.config
index 05b20842..da061387 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -15,7 +15,7 @@ process {
// BCL convert
withName: BCLCONVERT {
cpus = 32
- memory = 64.GB
+ memory = 128.GB
disk = { 500.GB * task.attempt }
ext.args = {
[
From de0daecc01bd13bc6115716cabd975400dfeb089 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 10:20:12 +0100
Subject: [PATCH 072/228] fix linting
---
.nf-core.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.nf-core.yml b/.nf-core.yml
index 09005197..2b4bcc77 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -27,7 +27,7 @@ lint:
template_strings:
- bin/cmgg_genelists
nf_test_content: false
-nf_core_version: 3.4.1
+nf_core_version: 3.5.1
repository_type: pipeline
template:
author: Matthias De Smet, Nicolas Vannieuwkerke
From 1231634495929e22dbe3cf78f656ffde7cfdb0c3 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 19:56:58 +0100
Subject: [PATCH 073/228] fix module config
---
conf/modules.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conf/modules.config b/conf/modules.config
index da061387..1cedbcfa 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -21,7 +21,7 @@ process {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
"--force",
- "--strict",
+ "--strict-mode true",
].join(" ").trim()
}
}
From f3495f6393b324933f1a61a2f9c34a669200a600 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 20:19:17 +0100
Subject: [PATCH 074/228] update contributors
---
nextflow.config | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 01378b19..d72f24cf 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -257,22 +257,21 @@ dag {
manifest {
name = 'nf-cmgg/preprocessing'
contributors = [
- // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0
[
name: 'Matthias De Smet',
- affiliation: '',
- email: '',
- github: '',
- contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
- orcid: ''
+ affiliation: 'Center for Medical Genetics Ghent, Ghent University, Belgium',
+ email: 'matthias.desmet@ugent.be',
+ github: '@matthdsm',
+ contribution: ["author","maintainer"], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: 'https://orcid.org/0000-0003-2555-3114'
],
[
name: ' Nicolas Vannieuwkerke',
- affiliation: '',
- email: '',
- github: '',
- contribution: [], // List of contribution types ('author', 'maintainer' or 'contributor')
- orcid: ''
+ affiliation: 'Center for Medical Genetics Ghent, Ghent University Hospital, Belgium',
+ email: 'nicolas.vannieuwkerke@ugent.be',
+ github: '@nvnieuwk',
+ contribution: ["maintainer"], // List of contribution types ('author', 'maintainer' or 'contributor')
+ orcid: 'https://orcid.org/0009-0003-5619-1555'
],
]
homePage = 'https://github.com/nf-cmgg/preprocessing'
From 3713ccfe2efc6d620e51ffa9ed1091938c8e8db5 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 2 Dec 2025 20:19:55 +0100
Subject: [PATCH 075/228] changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5bf9c031..e929fc1e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 2.1.0dev
- Update the output handling to use the new workflow output definitions.
+- Bump all modules to latest versions.
## v2.0.6
From 02697a6fddb0893961e646a9100fd75e36a22c63 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 3 Dec 2025 08:51:27 +0100
Subject: [PATCH 076/228] increase disk, set stageOutMode
---
conf/modules.config | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/conf/modules.config b/conf/modules.config
index 1cedbcfa..f5416df9 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -16,7 +16,9 @@ process {
withName: BCLCONVERT {
cpus = 32
memory = 128.GB
- disk = { 500.GB * task.attempt }
+ disk = { 1.TB * task.attempt }
+ stageOutMode = 'copy'
+
ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
From 753f55b61b1c644492301493b8ab20d683725809 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 3 Dec 2025 09:07:04 +0100
Subject: [PATCH 077/228] add strobealign config
---
conf/modules.config | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/conf/modules.config b/conf/modules.config
index f5416df9..0678b28b 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -130,6 +130,18 @@ process {
}
}
+ //// STROBEALIGN
+ withName: STROBEALIGN {
+ ext.args = {
+ [
+ meta.readgroup ? "--rg-id ${meta.readgroup.ID}" : "",
+ meta.readgroup ? "--rg " + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join(" --rg ") : "",
+ "-C",
+ ].join(" ").trim()
+ }
+ }
+
+ //// STAR
withName: STAR_ALIGN {
ext.args = {
[
From fe0791ad046cc42e6ede61f06eea4b0fa6d55ec8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 3 Dec 2025 12:21:57 +0100
Subject: [PATCH 078/228] add 50001 (spot pre-empted) to retry codes
---
conf/base.config | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/conf/base.config b/conf/base.config
index 4f3a0d41..67db29f3 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -10,22 +10,15 @@
process {
- // TODO nf-core: Check the defaults for all processes
cpus = { 1 * task.attempt }
memory = { 6.GB * task.attempt }
time = { 4.h * task.attempt }
- errorStrategy = { task.exitStatus in ((130..145) + 104 + 175) ? 'retry' : 'finish' }
- maxRetries = 1
+ errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001) ? 'retry' : 'finish' }
+ maxRetries = 3
maxErrors = '-1'
// Process-specific resource requirements
- // NOTE - Please try and reuse the labels below as much as possible.
- // These labels are used and recognised by default in DSL2 files hosted on nf-core/modules.
- // If possible, it would be nice to keep the same label naming convention when
- // adding in your local modules too.
- // TODO nf-core: Customise requirements for specific processes.
- // See https://www.nextflow.io/docs/latest/config.html#config-process-selectors
withLabel:process_single {
cpus = { 1 }
memory = { 6.GB * task.attempt }
From 6227b4bc56ddb76e4f7e653bcb2b33c83d3c2486 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 09:07:53 +0100
Subject: [PATCH 079/228] output files in library subdir where possible
---
main.nf | 58 ++++++++++++++++++++++++++++-----------------------------
1 file changed, 29 insertions(+), 29 deletions(-)
diff --git a/main.nf b/main.nf
index 640ad840..913e2305 100644
--- a/main.nf
+++ b/main.nf
@@ -115,46 +115,46 @@ output {
log >> out_path
} }
fastp_json { path { meta, json ->
- json >> "${meta.samplename}/${json.name}"
+ json >> meta.library ? "${meta.library}/${meta.samplename}/${json.name}" : "${meta.samplename}/${json.name}"
} }
fastp_html { path { meta, html ->
- html >> "${meta.samplename}/${html.name}"
+ html >> meta.library ? "${meta.library}/${meta.samplename}/${html.name}" : "${meta.samplename}/${html.name}"
} }
ucrams { path { meta, cram ->
- cram >> "${meta.samplename}/${meta.samplename}.unaligned.cram"
+ cram >> meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.unaligned.cram" : "${meta.samplename}/${meta.samplename}.unaligned.cram"
} }
crams { path { meta, cram, crai ->
- cram >> "${meta.samplename}/${meta.samplename}.cram"
- crai >> "${meta.samplename}/${meta.samplename}.cram.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"
} }
align_reports { path { meta, log ->
- log >> "${meta.samplename}/${log.name}"
+ log >> meta.library ? "${meta.library}/${meta.samplename}/${log.name}" : "${meta.samplename}/${log.name}"
} }
sormadup_metrics { path { meta, metrics ->
- metrics >> "${meta.samplename}/${meta.samplename}.duplicate_metrics.txt"
+ metrics >> meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.duplicate_metrics.txt" : "${meta.samplename}/${meta.samplename}.duplicate_metrics.txt"
} }
- mosdepth_global { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_summary { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_regions { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_per_base_d4 { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_per_base_bed { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_per_base_csi { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_regions_bed { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_regions_csi { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_quantized_bed { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_quantized_csi { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_thresholds_bed { path { meta, _file -> "${meta.samplename}/" } }
- mosdepth_thresholds_csi { path { meta, _file -> "${meta.samplename}/" } }
- samtools_coverage { path { meta, _file -> "${meta.samplename}/" } }
- panelcoverage { path { meta, _file -> "${meta.samplename}/" } }
- samtools_stats { path { meta, _file -> "${meta.samplename}/" } }
- samtools_flagstat { path { meta, _file -> "${meta.samplename}/" } }
- samtools_idxstats { path { meta, _file -> "${meta.samplename}/" } }
- picard_multiplemetrics { path { meta, _file -> "${meta.samplename}/" } }
- picard_multiplemetrics_pdf { path { meta, _file -> "${meta.samplename}/" } }
- picard_wgsmetrics { path { meta, _file -> "${meta.samplename}/" } }
- picard_hsmetrics { path { meta, _file -> "${meta.samplename}/" } }
- md5sums { path { meta, _file -> "${meta.samplename}/" } }
+ mosdepth_global { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_summary { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_regions { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_per_base_d4 { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_per_base_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_per_base_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_regions_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_regions_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_quantized_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_quantized_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_thresholds_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ mosdepth_thresholds_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ samtools_coverage { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ panelcoverage { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ samtools_stats { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ samtools_flagstat { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ samtools_idxstats { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ picard_multiplemetrics { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ picard_multiplemetrics_pdf { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ picard_wgsmetrics { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ picard_hsmetrics { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ md5sums { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
multiqc_report { path "multiqc/" }
multiqc_data { path "multiqc/" }
multiqc_plots { path "multiqc/" }
From 58a6bed14647c542867f81cbedf050b2cfc53218 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 09:37:59 +0100
Subject: [PATCH 080/228] fix output definition, retain library in meta
---
main.nf | 133 ++++++++++++++++++++++++++++---------
nextflow.config | 1 -
workflows/preprocessing.nf | 2 +-
3 files changed, 104 insertions(+), 32 deletions(-)
diff --git a/main.nf b/main.nf
index 913e2305..70f05632 100644
--- a/main.nf
+++ b/main.nf
@@ -115,46 +115,119 @@ output {
log >> out_path
} }
fastp_json { path { meta, json ->
- json >> meta.library ? "${meta.library}/${meta.samplename}/${json.name}" : "${meta.samplename}/${json.name}"
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/${json.name}" as String : "${meta.samplename}/${json.name}"
+ json >> out_path
} }
fastp_html { path { meta, html ->
- html >> meta.library ? "${meta.library}/${meta.samplename}/${html.name}" : "${meta.samplename}/${html.name}"
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/${html.name}" as String : "${meta.samplename}/${html.name}"
+ html >> out_path
} }
ucrams { path { meta, cram ->
- cram >> meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.unaligned.cram" : "${meta.samplename}/${meta.samplename}.unaligned.cram"
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.unaligned.cram" as String : "${meta.samplename}/${meta.samplename}.unaligned.cram"
+ cram >> out_path
} }
crams { path { meta, cram, 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"
+ 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
} }
align_reports { path { meta, log ->
- log >> meta.library ? "${meta.library}/${meta.samplename}/${log.name}" : "${meta.samplename}/${log.name}"
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/${log.name}" as String : "${meta.samplename}/${log.name}"
+ log >> out_path
} }
sormadup_metrics { path { meta, metrics ->
- metrics >> meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.duplicate_metrics.txt" : "${meta.samplename}/${meta.samplename}.duplicate_metrics.txt"
- } }
- mosdepth_global { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_summary { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_regions { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_per_base_d4 { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_per_base_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_per_base_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_regions_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_regions_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_quantized_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_quantized_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_thresholds_bed { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- mosdepth_thresholds_csi { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- samtools_coverage { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- panelcoverage { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- samtools_stats { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- samtools_flagstat { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- samtools_idxstats { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- picard_multiplemetrics { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- picard_multiplemetrics_pdf { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- picard_wgsmetrics { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- picard_hsmetrics { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
- md5sums { path { meta, _file -> meta.library ? "${meta.library}/${meta.samplename}/" : "${meta.samplename}/" } }
+ 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
+ } }
+ mosdepth_global { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_summary { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_regions { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_per_base_d4 { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_per_base_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_per_base_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_regions_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_regions_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_quantized_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_quantized_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_thresholds_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_thresholds_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_coverage { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ panelcoverage { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_stats { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_flagstat { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_idxstats { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_multiplemetrics { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_multiplemetrics_pdf { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_wgsmetrics { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_hsmetrics { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ md5sums { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
multiqc_report { path "multiqc/" }
multiqc_data { path "multiqc/" }
multiqc_plots { path "multiqc/" }
diff --git a/nextflow.config b/nextflow.config
index d72f24cf..b41984a0 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -9,7 +9,6 @@
// Global default params, used in configs
params {
- // TODO nf-core: Specify your pipeline's command line flags
// Input options
input = null
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index f90dd2eb..486c49ef 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -189,7 +189,7 @@ workflow PREPROCESSING {
.transpose()
.map { meta_fastq, count -> [meta_fastq[0] + ['count': count], meta_fastq[1]] }
.map { meta, fastq ->
- return [meta - meta.subMap('fcid', 'lane', 'library'), fastq]
+ return [meta - meta.subMap('fcid', 'lane'), fastq]
}
.set { ch_fastq_per_sample }
From 8728f8c9b15f861afd5146774fc368f19b7a39ca Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 09:45:30 +0100
Subject: [PATCH 081/228] fix outdir issue
---
nextflow.config | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/nextflow.config b/nextflow.config
index b41984a0..91cb7cf6 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -294,3 +294,8 @@ validation {
// Load modules.config for DSL2 module specific options
includeConfig 'conf/modules.config'
+
+// Set default output dir and publish mode
+// Temporary fix until the nf-core template supports workflow output definitions
+workflow.output.mode = params.publish_dir_mode
+outputDir = params.outdir
From d95df0f09239e86e5be6b48d7c77350cc755f885 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 11:57:31 +0100
Subject: [PATCH 082/228] add per-library multiqc
---
conf/modules.config | 8 +-
main.nf | 21 +--
modules.json | 3 +-
modules/nf-core/multiqc/main.nf | 3 +-
modules/nf-core/multiqc/multiqc.diff | 27 ++++
workflows/preprocessing.nf | 187 +++++++++++++--------------
6 files changed, 144 insertions(+), 105 deletions(-)
create mode 100644 modules/nf-core/multiqc/multiqc.diff
diff --git a/conf/modules.config b/conf/modules.config
index 0678b28b..e1603297 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -247,9 +247,15 @@ process {
// MultiQC
- withName: MULTIQC {
+ withName: MULTIQC_MAIN {
+ ext.prefix = { params.multiqc_title ? params.multiqc_title : "multiqc" }
ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' }
}
+
+ withName: MULTIQC_LIBRARY {
+ ext.prefix = { meta.id ? "multiqc_library_${meta.id}" : "multiqc_library" }
+ ext.args = { meta.id ? "--title \"${meta.id} - Pool Summary\"" : '' }
+ }
}
env {
diff --git a/main.nf b/main.nf
index 70f05632..87371efa 100644
--- a/main.nf
+++ b/main.nf
@@ -61,7 +61,7 @@ workflow {
params.outdir,
params.monochrome_logs,
params.hook_url,
- PREPROCESSING.out.multiqc_report,
+ PREPROCESSING.out.multiqc_main_report,
)
publish:
@@ -96,10 +96,12 @@ workflow {
picard_wgsmetrics = PREPROCESSING.out.picard_wgsmetrics
picard_hsmetrics = PREPROCESSING.out.picard_hsmetrics
md5sums = PREPROCESSING.out.md5sums
- multiqc_report = PREPROCESSING.out.multiqc_report
- multiqc_data = PREPROCESSING.out.multiqc_data
- multiqc_plots = PREPROCESSING.out.multiqc_plots
-
+ 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
}
output {
@@ -228,7 +230,10 @@ output {
def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
return out_path
} }
- multiqc_report { path "multiqc/" }
- multiqc_data { path "multiqc/" }
- multiqc_plots { path "multiqc/" }
+ multiqc_main_report { path "multiqc/" }
+ multiqc_main_data { path "multiqc/" }
+ multiqc_main_plots { path "multiqc/" }
+ multiqc_library_report { path "multiqc/" }
+ multiqc_library_data { path "multiqc/" }
+ multiqc_library_plots { path "multiqc/" }
}
diff --git a/modules.json b/modules.json
index f1b67967..cbebbe1e 100644
--- a/modules.json
+++ b/modules.json
@@ -65,7 +65,8 @@
"multiqc": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": ["modules"]
+ "installed_by": ["modules"],
+ "patch": "modules/nf-core/multiqc/multiqc.diff"
},
"picard/collecthsmetrics": {
"branch": "master",
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 335afccc..2a9feaa3 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/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 @@ process MULTIQC {
'community.wave.seqera.io/library/multiqc:1.32--d58f60e4deb769bf' }"
input:
- path multiqc_files, stageAs: "?/*"
+ tuple val(meta), path(multiqc_files, stageAs: "?/*")
path(multiqc_config)
path(extra_multiqc_config)
path(multiqc_logo)
diff --git a/modules/nf-core/multiqc/multiqc.diff b/modules/nf-core/multiqc/multiqc.diff
new file mode 100644
index 00000000..947ff7e3
--- /dev/null
+++ b/modules/nf-core/multiqc/multiqc.diff
@@ -0,0 +1,27 @@
+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.32--d58f60e4deb769bf' }"
+
+ 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/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 486c49ef..ccdbea4d 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -7,25 +7,26 @@ include { samplesheetToList } from 'plugin/nf-schema'
*/
// Modules
-include { FASTP } from '../modules/nf-core/fastp/main'
-include { MD5SUM } from '../modules/nf-core/md5sum/main'
-include { MOSDEPTH } from '../modules/nf-core/mosdepth/main'
-include { MULTIQC } from '../modules/nf-core/multiqc/main'
-include { SAMTOOLS_COVERAGE } from '../modules/nf-core/samtools/coverage/main'
+include { FASTP } from '../modules/nf-core/fastp/main'
+include { MD5SUM } from '../modules/nf-core/md5sum/main'
+include { MOSDEPTH } from '../modules/nf-core/mosdepth/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'
// Subworkflows
-include { BAM_QC } from '../subworkflows/local/bam_qc/main'
-include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
-include { COVERAGE } from '../subworkflows/local/coverage/main'
-include { FASTQ_TO_UCRAM } from '../subworkflows/local/fastq_to_unaligned_cram/main'
-include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
+include { BAM_QC } from '../subworkflows/local/bam_qc/main'
+include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
+include { COVERAGE } from '../subworkflows/local/coverage/main'
+include { FASTQ_TO_UCRAM } from '../subworkflows/local/fastq_to_unaligned_cram/main'
+include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
// Functions
-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 { 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'
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -78,12 +79,8 @@ workflow PREPROCESSING {
BCL_DEMULTIPLEX(ch_illumina_flowcell.flowcell, "bclconvert")
BCL_DEMULTIPLEX.out.fastq.dump(tag: "DEMULTIPLEX: fastq", pretty: true)
ch_multiqc_files = ch_multiqc_files.mix(
- BCL_DEMULTIPLEX.out.reports.map { _meta, reports ->
- return reports
- },
- BCL_DEMULTIPLEX.out.stats.map { _meta, stats ->
- return stats
- },
+ BCL_DEMULTIPLEX.out.reports,
+ BCL_DEMULTIPLEX.out.stats
)
ch_versions = ch_versions.mix(BCL_DEMULTIPLEX.out.versions)
@@ -206,11 +203,7 @@ workflow PREPROCESSING {
// Run QC, trimming and adapter removal
// FASTP([meta, fastq], adapter_fasta, save_trimmed, save_merged)
FASTP(ch_fastq_per_sample.map{ meta, fastq -> return [meta, fastq, []] }, false, false, false)
- ch_multiqc_files = ch_multiqc_files.mix(
- FASTP.out.json.map { _meta, json ->
- return json
- }
- )
+ ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
ch_versions = ch_versions.mix(FASTP.out.versions.first())
// edit meta.id to match sample name
@@ -274,7 +267,7 @@ workflow PREPROCESSING {
markdup,
)
- ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics.map { _meta, metrics -> metrics })
+ ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics)
ch_versions = ch_versions.mix(FASTQ_TO_CRAM.out.versions)
@@ -339,18 +332,10 @@ workflow PREPROCESSING {
if (params.run_coverage) {
COVERAGE(ch_cram_crai_fasta_fai_roi, genelists)
ch_multiqc_files = ch_multiqc_files.mix(
- COVERAGE.out.mosdepth_summary.map { _meta, txt ->
- return txt
- },
- COVERAGE.out.mosdepth_global.map { _meta, txt ->
- return txt
- },
- COVERAGE.out.mosdepth_regions.map { _meta, txt ->
- return txt
- },
- COVERAGE.out.samtools_coverage.map { _meta, txt ->
- return txt
- },
+ COVERAGE.out.mosdepth_summary,
+ COVERAGE.out.mosdepth_global,
+ COVERAGE.out.mosdepth_regions,
+ COVERAGE.out.samtools_coverage,
)
mosdepth_global_out = COVERAGE.out.mosdepth_global
mosdepth_summary_out = COVERAGE.out.mosdepth_summary
@@ -403,24 +388,13 @@ workflow PREPROCESSING {
BAM_QC(ch_cram_crai_roi_fasta_fai_dict, params.disable_picard_metrics)
ch_multiqc_files = ch_multiqc_files.mix(
- BAM_QC.out.samtools_stats.map { _meta, txt ->
- return txt
- },
- BAM_QC.out.samtools_flagstat.map { _meta, txt ->
- return txt
- },
- BAM_QC.out.samtools_idxstats.map { _meta, txt ->
- return txt
- },
- BAM_QC.out.picard_multiplemetrics.map { _meta, txt ->
- return txt
- },
- BAM_QC.out.picard_wgsmetrics.map { _meta, txt ->
- return txt
- },
- BAM_QC.out.picard_hsmetrics.map { _meta, txt ->
- return txt
- },
+ BAM_QC.out.samtools_stats,
+ BAM_QC.out.samtools_flagstat,
+ BAM_QC.out.samtools_idxstats,
+ BAM_QC.out.picard_multiplemetrics,
+ BAM_QC.out.picard_wgsmetrics,
+ BAM_QC.out.picard_wgsmetrics,
+ BAM_QC.out.picard_hsmetrics,
)
ch_versions = ch_versions.mix(BAM_QC.out.versions)
@@ -486,11 +460,24 @@ workflow PREPROCESSING {
ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params))
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_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
+
+ ch_multiqc_library_files = ch_multiqc_files
+ .filter { meta, _file ->
+ meta.library != null && meta.library != ""
+ }
+ .map { meta, file ->
+ return [["id": meta.library] ?: meta.samplename, file]
+ }
+ .groupTuple()
+ ch_multiqc_library_files.dump(tag: "MULTIQC files per library", pretty: true)
+
+ ch_multiqc_files = ch_multiqc_files.map{ _meta, files -> files }.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
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: false))
+ ch_multiqc_files = ch_multiqc_files.map { file -> [["id": "main"], file] }.groupTuple()
+ ch_multiqc_files.dump(tag: "MULTIQC files", pretty: true)
- MULTIQC(
+ MULTIQC_MAIN(
ch_multiqc_files.collect(),
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
@@ -499,42 +486,54 @@ workflow PREPROCESSING {
[],
)
+ MULTIQC_LIBRARY(
+ ch_multiqc_library_files,
+ ch_multiqc_config.toList(),
+ ch_multiqc_custom_config.toList(),
+ ch_multiqc_logo.toList(),
+ [],
+ [],
+ )
+
emit:
- demultiplex_interop = BCL_DEMULTIPLEX.out.interop
- demultiplex_reports = BCL_DEMULTIPLEX.out.reports
- demultiplex_logs = BCL_DEMULTIPLEX.out.logs
- fastp_json = FASTP.out.json
- fastp_html = FASTP.out.html
- ucrams = FASTQ_TO_UCRAM.out.cram
- crams = FASTQ_TO_CRAM.out.cram_crai
- align_reports = FASTQ_TO_CRAM.out.align_reports
- sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = mosdepth_global_out
- mosdepth_summary = mosdepth_summary_out
- mosdepth_regions = mosdepth_regions_out
- mosdepth_per_base_d4 = mosdepth_per_base_d4_out
- mosdepth_per_base_bed = mosdepth_per_base_bed_out
- mosdepth_per_base_csi = mosdepth_per_base_csi_out
- mosdepth_regions_bed = mosdepth_regions_bed_out
- mosdepth_regions_csi = mosdepth_regions_csi_out
- mosdepth_quantized_bed = mosdepth_quantized_bed_out
- mosdepth_quantized_csi = mosdepth_quantized_csi_out
- mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
- mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
- samtools_coverage = samtools_coverage_out
- panelcoverage = panelcoverage_out
- samtools_stats = BAM_QC.out.samtools_stats
- samtools_flagstat = BAM_QC.out.samtools_flagstat
- samtools_idxstats = BAM_QC.out.samtools_idxstats
- picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
- picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
- picard_wgsmetrics = BAM_QC.out.picard_wgsmetrics
- picard_hsmetrics = BAM_QC.out.picard_hsmetrics
- md5sums = MD5SUM.out.checksum
- multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html
- multiqc_data = MULTIQC.out.data
- multiqc_plots = MULTIQC.out.plots
- versions = ch_versions // channel: [ path(versions.yml) ]
+ demultiplex_interop = BCL_DEMULTIPLEX.out.interop
+ demultiplex_reports = BCL_DEMULTIPLEX.out.reports
+ demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ fastp_json = FASTP.out.json
+ fastp_html = FASTP.out.html
+ ucrams = FASTQ_TO_UCRAM.out.cram
+ crams = FASTQ_TO_CRAM.out.cram_crai
+ align_reports = FASTQ_TO_CRAM.out.align_reports
+ sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
+ mosdepth_global = mosdepth_global_out
+ mosdepth_summary = mosdepth_summary_out
+ mosdepth_regions = mosdepth_regions_out
+ mosdepth_per_base_d4 = mosdepth_per_base_d4_out
+ mosdepth_per_base_bed = mosdepth_per_base_bed_out
+ mosdepth_per_base_csi = mosdepth_per_base_csi_out
+ mosdepth_regions_bed = mosdepth_regions_bed_out
+ mosdepth_regions_csi = mosdepth_regions_csi_out
+ mosdepth_quantized_bed = mosdepth_quantized_bed_out
+ mosdepth_quantized_csi = mosdepth_quantized_csi_out
+ mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
+ mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
+ samtools_coverage = samtools_coverage_out
+ panelcoverage = panelcoverage_out
+ samtools_stats = BAM_QC.out.samtools_stats
+ samtools_flagstat = BAM_QC.out.samtools_flagstat
+ samtools_idxstats = BAM_QC.out.samtools_idxstats
+ picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
+ picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
+ 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
+ multiqc_main_plots = MULTIQC_MAIN.out.plots
+ multiqc_library_report = MULTIQC_LIBRARY.out.report.toList()
+ multiqc_library_data = MULTIQC_LIBRARY.out.data
+ multiqc_library_plots = MULTIQC_LIBRARY.out.plots
+ versions = ch_versions
}
/*
From 1fc03e9b108d5c727d84d7856fc5b7d6f78c99d1 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 13:06:43 +0100
Subject: [PATCH 083/228] improve logic
---
nextflow.config | 4 ++++
workflows/preprocessing.nf | 29 +++++++++++++++--------------
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 91cb7cf6..6e2cfcae 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -238,18 +238,22 @@ nextflow.enable.configProcessNamesValidation = false
timeline {
enabled = true
+ overwrite = true
file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html"
}
report {
enabled = true
+ overwrite = true
file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html"
}
trace {
enabled = true
+ overwrite = true
file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt"
}
dag {
enabled = true
+ overwrite = true
file = "${params.outdir}/pipeline_info/pipeline_dag_${params.trace_report_suffix}.html"
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index ccdbea4d..11615222 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -461,24 +461,25 @@ workflow PREPROCESSING {
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_multiqc_library_files = ch_multiqc_files
- .filter { meta, _file ->
- meta.library != null && meta.library != ""
- }
- .map { meta, file ->
- return [["id": meta.library] ?: meta.samplename, file]
+ ch_multiqc_files = ch_multiqc_files.map { meta, files ->
+ return [meta.library ? [id: meta.library] : [id: 'main'], files]
}
.groupTuple()
- ch_multiqc_library_files.dump(tag: "MULTIQC files per library", pretty: true)
+ .branch { meta, files ->
+ main: meta.id == 'main'
+ return files.flatten()
+ library: meta.id != 'main'
+ return [meta, files.flatten()]
+ }
+ ch_multiqc_files.main.dump(tag: "MULTIQC files - main", pretty: true)
+ ch_multiqc_files.library.dump(tag: "MULTIQC files - library", pretty: true)
- ch_multiqc_files = ch_multiqc_files.map{ _meta, files -> files }.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
- 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: false))
- ch_multiqc_files = ch_multiqc_files.map { file -> [["id": "main"], file] }.groupTuple()
- ch_multiqc_files.dump(tag: "MULTIQC files", pretty: true)
+ ch_multiqc_files.main = ch_multiqc_files.main.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
+ ch_multiqc_files.main = ch_multiqc_files.main.mix(ch_collated_versions)
+ ch_multiqc_files.main = ch_multiqc_files.main.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: false))
MULTIQC_MAIN(
- ch_multiqc_files.collect(),
+ ch_multiqc_files.main.collect().map{ files -> [[id: 'main'], files] },
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -487,7 +488,7 @@ workflow PREPROCESSING {
)
MULTIQC_LIBRARY(
- ch_multiqc_library_files,
+ ch_multiqc_files.library,
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
From 9d6cd02d0f3730c5a65de118c078dfcc24bdd352 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 14:10:36 +0100
Subject: [PATCH 084/228] fix for MQC errors
---
workflows/preprocessing.nf | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 11615222..fc51cbf6 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -444,23 +444,27 @@ workflow PREPROCESSING {
name: 'nf_cmgg_preprocessing_software_mqc_versions.yml',
sort: true,
newLine: true
- ).set { ch_collated_versions }
-
- softwareVersionsToYAML(ch_versions)
- .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'preprocessing_software_mqc_versions.yml', sort: true, newLine: true)
+ )
+ .map { file -> [[id: 'main'], file] } // add meta for multiqc
.set { ch_collated_versions }
//
// MODULE: MultiQC
//
- ch_multiqc_config = channel.fromPath("${projectDir}/assets/multiqc_config.yml", checkIfExists: true)
+ 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_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
+ ch_multiqc_logo = params.multiqc_logo ? channel.fromPath(params.multiqc_logo, checkIfExists: true) : channel.empty()
+
+ summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params))
- 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_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml').map{ file -> [[id: 'main'], file] })
+
+ 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_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.map { meta, files ->
return [meta.library ? [id: meta.library] : [id: 'main'], files]
}
@@ -474,10 +478,6 @@ workflow PREPROCESSING {
ch_multiqc_files.main.dump(tag: "MULTIQC files - main", pretty: true)
ch_multiqc_files.library.dump(tag: "MULTIQC files - library", pretty: true)
- ch_multiqc_files.main = ch_multiqc_files.main.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
- ch_multiqc_files.main = ch_multiqc_files.main.mix(ch_collated_versions)
- ch_multiqc_files.main = ch_multiqc_files.main.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: false))
-
MULTIQC_MAIN(
ch_multiqc_files.main.collect().map{ files -> [[id: 'main'], files] },
ch_multiqc_config.toList(),
From ff2b95e4bdbc1a13241151d5ebde5c472753bca5 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 14:24:58 +0100
Subject: [PATCH 085/228] update test samplesheet
---
tests/inputs/fastq.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/inputs/fastq.yml b/tests/inputs/fastq.yml
index bfb9e2d0..20a5ec56 100644
--- a/tests/inputs/fastq.yml
+++ b/tests/inputs/fastq.yml
@@ -2,14 +2,14 @@
# fastq inputs
- id: sample1_L001
samplename: fastq_paired1
- library: test
+ library: test_library
organism: Homo sapiens
tag: WES
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: test_library
organism: Homo sapiens
tag: WES
fastq_1: https://github.com/nf-cmgg/test-datasets/raw/main/data/genomics/homo_sapiens/illumina/fastq/test_R1.fastq.gz
From 768997a22a33a4adfe406a6dd7b173cd3dc67341 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Thu, 4 Dec 2025 17:30:24 +0100
Subject: [PATCH 086/228] fix topics mess
---
modules/nf-core/multiqc/main.nf | 2 +-
workflows/preprocessing.nf | 13 ++++++-------
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 2a9feaa3..1d691b15 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/modules/nf-core/multiqc/main.nf
@@ -19,7 +19,7 @@ process MULTIQC {
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"'), topic: versions, emit: versions_multiqc
+ tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions_multiqc
when:
task.ext.when == null || task.ext.when
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index fc51cbf6..c737d2b1 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -468,12 +468,11 @@ workflow PREPROCESSING {
ch_multiqc_files = ch_multiqc_files.map { meta, files ->
return [meta.library ? [id: meta.library] : [id: 'main'], files]
}
- .groupTuple()
.branch { meta, files ->
main: meta.id == 'main'
- return files.flatten()
+ return files
library: meta.id != 'main'
- return [meta, files.flatten()]
+ return [meta, files instanceof List ? files : [files]]
}
ch_multiqc_files.main.dump(tag: "MULTIQC files - main", pretty: true)
ch_multiqc_files.library.dump(tag: "MULTIQC files - library", pretty: true)
@@ -488,7 +487,7 @@ workflow PREPROCESSING {
)
MULTIQC_LIBRARY(
- ch_multiqc_files.library,
+ ch_multiqc_files.library.transpose(by:1).groupTuple(),
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -529,9 +528,9 @@ workflow PREPROCESSING {
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
- multiqc_main_plots = MULTIQC_MAIN.out.plots
- multiqc_library_report = MULTIQC_LIBRARY.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
versions = ch_versions
From dd391dca6809817dd2a4c40e70900e23cbdad1e1 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Thu, 4 Dec 2025 17:31:15 +0100
Subject: [PATCH 087/228] patch multiqc
---
modules.json | 130 ++++++++++++++++++++-------
modules/nf-core/multiqc/multiqc.diff | 17 +++-
2 files changed, 111 insertions(+), 36 deletions(-)
diff --git a/modules.json b/modules.json
index cbebbe1e..de8e0ac9 100644
--- a/modules.json
+++ b/modules.json
@@ -8,151 +8,207 @@
"bcl2fastq": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["bcl_demultiplex"]
+ "installed_by": [
+ "bcl_demultiplex"
+ ]
},
"bclconvert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["bcl_demultiplex", "modules"],
+ "installed_by": [
+ "bcl_demultiplex",
+ "modules"
+ ],
"patch": "modules/nf-core/bclconvert/bclconvert.diff"
},
"biobambam/bamsormadup": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff"
},
"bowtie2/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["fastq_align_dna", "modules"],
+ "installed_by": [
+ "fastq_align_dna",
+ "modules"
+ ],
"patch": "modules/nf-core/bowtie2/align/bowtie2-align.diff"
},
"bwa/mem": {
"branch": "master",
"git_sha": "1c46359c837ef768b004519f535c30378e8289fc",
- "installed_by": ["fastq_align_dna"],
+ "installed_by": [
+ "fastq_align_dna"
+ ],
"patch": "modules/nf-core/bwa/mem/bwa-mem.diff"
},
"bwamem2/mem": {
"branch": "master",
"git_sha": "d86336f3e7ae0d5f76c67b0859409769cfeb2af2",
- "installed_by": ["fastq_align_dna"],
+ "installed_by": [
+ "fastq_align_dna"
+ ],
"patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff"
},
"dragmap/align": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["fastq_align_dna"],
+ "installed_by": [
+ "fastq_align_dna"
+ ],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
"fastp": {
"branch": "master",
"git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"md5sum": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"mosdepth": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/mosdepth/mosdepth.diff"
},
"multiqc": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/multiqc/multiqc.diff"
},
"picard/collecthsmetrics": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff"
},
"picard/collectmultiplemetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff"
},
"picard/collectwgsmetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
"samtools/cat": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/cat/samtools-cat.diff"
},
"samtools/convert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/convert/samtools-convert.diff"
},
"samtools/coverage": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
"samtools/flagstat": {
"branch": "master",
"git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"samtools/idxstats": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"samtools/import": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"samtools/sormadup": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/sormadup/samtools-sormadup.diff"
},
"samtools/sort": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/sort/samtools-sort.diff"
},
"samtools/stats": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/stats/samtools-stats.diff"
},
"snapaligner/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["fastq_align_dna", "modules"],
+ "installed_by": [
+ "fastq_align_dna",
+ "modules"
+ ],
"patch": "modules/nf-core/snapaligner/align/snapaligner-align.diff"
},
"star/align": {
"branch": "master",
"git_sha": "ce9e10540a1555145ddd1ddd8b15f7443cbe1449",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/star/align/star-align.diff"
},
"strobealign": {
"branch": "master",
"git_sha": "d5cc72b63c4e1565cb66e83f0577b04c0bb54d5c",
- "installed_by": ["fastq_align_dna", "modules"],
+ "installed_by": [
+ "fastq_align_dna",
+ "modules"
+ ],
"patch": "modules/nf-core/strobealign/strobealign.diff"
}
}
@@ -162,30 +218,40 @@
"bcl_demultiplex": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"fastq_align_dna": {
"branch": "master",
"git_sha": "070ddae7fb59384d3d85bf69eb9a1d71ab33ada9",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"utils_nextflow_pipeline": {
"branch": "master",
"git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"utils_nfcore_pipeline": {
"branch": "master",
"git_sha": "df4d1c8cdee98a1bbbed8fc51e82296568e0f9c1",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"utils_nfschema_plugin": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
}
}
}
}
}
-}
+}
\ No newline at end of file
diff --git a/modules/nf-core/multiqc/multiqc.diff b/modules/nf-core/multiqc/multiqc.diff
index 947ff7e3..36396fa5 100644
--- a/modules/nf-core/multiqc/multiqc.diff
+++ b/modules/nf-core/multiqc/multiqc.diff
@@ -1,6 +1,4 @@
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
@@ -19,9 +17,20 @@ Changes in 'multiqc/main.nf':
path(multiqc_config)
path(extra_multiqc_config)
path(multiqc_logo)
+@@ -18,7 +19,7 @@
+ 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"'), topic: versions, emit: versions_multiqc
++ tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions_multiqc
+
+ when:
+ task.ext.when == null || task.ext.when
+'modules/nf-core/multiqc/environment.yml' is unchanged
+'modules/nf-core/multiqc/meta.yml' is unchanged
+'modules/nf-core/multiqc/tests/custom_prefix.config' is unchanged
+'modules/nf-core/multiqc/tests/main.nf.test' is unchanged
'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
************************************************************
From 5a7c1e718d828c9ae3944e38bc7ac1f18c68e90a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 19:54:25 +0100
Subject: [PATCH 088/228] fix tests, add changelog
---
CHANGELOG.md | 1 +
tests/workflows/preprocessing.nf.test.snap | 782 ++++++++++++++++++++-
2 files changed, 762 insertions(+), 21 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e929fc1e..69949def 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Update the output handling to use the new workflow output definitions.
- Bump all modules to latest versions.
+- The workflow now outputs data in a subdirectory per `library`, including a library specific MultiQC report
## v2.0.6
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 348c1fd2..961504d8 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -20,6 +20,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -55,6 +56,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"readgroup": {
"CN": "CMGG",
@@ -78,6 +80,7 @@
{
"id": "sample1",
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -120,6 +123,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -137,6 +141,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -163,6 +168,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -189,6 +195,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -218,6 +225,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -244,6 +252,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -270,6 +279,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -296,6 +306,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -322,6 +333,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -348,6 +360,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -374,15 +387,286 @@
"mosdepth_thresholds_csi": [
],
- "multiqc_data": [
- "multiqc_data"
+ "multiqc_library_data": [
+ [
+ "biobambam2_deduplication.txt:md5,992b5decb6d017254ee9b02fbe076d81",
+ "fastp-insert-size-plot.txt:md5,66fec5f01198da8ecd97410ec1727021",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,23420affa90c1523becba23c09653a92",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,27bb3440b4edeab8a9dc2ec1077cfc0e",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,e49276ebe93bb8294ca51e6a0916e703",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,f7bf2354433b3514893f0fe18e7f7877",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,6c20997febd11ea6c80fe13a1761898b",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,a1d1cdbb1a1fb48b6d6bdf1f2192b2b7",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,e1d8dcf05d785f863cfb17c96c1f58a4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,30bfcca763531e4ee1638031d5359e48",
+ "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,2b0a42468f68992639ac8eacbf533134",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,4e6fea487fecc2ee55db1518ff30a0b5",
+ "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,72a6d8295748db4de13d6dc1d1eb83dc",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,3b1c7675660e838e75d1d5c62c0f3a61",
+ "fastp_filtered_reads_plot.txt:md5,9e506f1c8dbad71540697d11af4ba6df",
+ "llms-full.txt:md5,a9dd5cb0ccb6d732ac915af862770693",
+ "mosdepth-coverage-per-contig-single.txt:md5,e5dd72804ecbe8429179eaae01118d39",
+ "mosdepth-cumcoverage-dist-id.txt:md5,49f3ec6d8639c9b0f794e4bf96bd11c4",
+ "mosdepth_cov_dist.txt:md5,704ae312ab6109b1724e3fac0dc740ed",
+ "mosdepth_cumcov_dist.txt:md5,704ae312ab6109b1724e3fac0dc740ed",
+ "mosdepth_perchrom.txt:md5,e5dd72804ecbe8429179eaae01118d39",
+ "multiqc.log:md5,0bf142cd568af28e39f166591e28b550",
+ "multiqc.parquet:md5,c66e2b2f6ba202acf3cda2ebbd7b2a06",
+ "multiqc_biobambam2_dups.txt:md5,31c942ce8964d0941cb79f8c9de8aa04",
+ "multiqc_citations.txt:md5,294fadee817c59c64f1b985ac204b224",
+ "multiqc_data.json:md5,0c06c19b2156369fab669049b6e37eb5",
+ "multiqc_fastp.txt:md5,f917618024634bb24850390c8f4836e7",
+ "multiqc_general_stats.txt:md5,439ff0539fa18ba86b79e990c42dff75",
+ "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3f32124a666ad5fa6dda93759cf450f0",
+ "multiqc_picard_HsMetrics.txt:md5,a5ccd0c64f6e2944a559280aaabce595",
+ "multiqc_picard_baseContent.txt:md5,deba2098af2de348792a37b405eab78c",
+ "multiqc_picard_quality_by_cycle.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
+ "multiqc_picard_quality_score_distribution.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
+ "multiqc_samtools_coverage.txt:md5,2b8ac198265a850d581d453eacb402cd",
+ "multiqc_samtools_flagstat.txt:md5,5ce133683245100011b77cd676471de1",
+ "multiqc_samtools_idxstats.txt:md5,7e542f20dd27d352b5d2be33e1920220",
+ "multiqc_samtools_stats.txt:md5,1dd571a033605b1224ebac95deceee0b",
+ "multiqc_sources.txt:md5,26011ccef291bca153e14a43437b4bbc",
+ "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "picard_MeanQualityByCycle_histogram_1.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
+ "picard_QualityScoreDistribution_histogram.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
+ "picard_alignment_readlength_plot.txt:md5,891edbc18f01189de8c5bf52320ee6c7",
+ "picard_alignment_summary_Aligned_Bases.txt:md5,7d13622d8d4083fe2a4be5bf92ea77e6",
+ "picard_alignment_summary_Aligned_Reads.txt:md5,ed831c3df4e4465d9c6fb52ce731ee71",
+ "picard_base_distribution_by_cycle__Adenine.txt:md5,989b9c396dfa032d8ca02f57b7cc6e7d",
+ "picard_base_distribution_by_cycle__Cytosine.txt:md5,dc7b79f9ab4bc66db25b509e423abf2b",
+ "picard_base_distribution_by_cycle__Guanine.txt:md5,1f2a16426851c0e434558d437ac482e3",
+ "picard_base_distribution_by_cycle__Thymine.txt:md5,cbc90b7275fa29bf09d4be71fc443df1",
+ "picard_base_distribution_by_cycle__Undetermined.txt:md5,e0a643aff9cf4b0d277c4da6c798c6dc",
+ "picard_hsmetrics_table.txt:md5,a170b91563f01fc311048a9f1983ac87",
+ "picard_percentage_target_bases.txt:md5,f29ba29d0df56128046793ff26ca5950",
+ "picard_quality_by_cycle.txt:md5,f89d83da6f5a7fa00511a8959c2bd3c2",
+ "picard_quality_score_distribution.txt:md5,9d72562e154dba19a69180e2875ae8e9",
+ "samtools-coverage-table.txt:md5,0f9fe2b460eb659d5ce23deba4ee62d8",
+ "samtools-coverage_BQ.txt:md5,68b97b7434bd35c71d3d14de478ba1b9",
+ "samtools-coverage_Bases.txt:md5,f8fcf650945e7b347409d678fae3b006",
+ "samtools-coverage_Coverage.txt:md5,bc62f359fced9778f869022dd4ab6647",
+ "samtools-coverage_MQ.txt:md5,5f9ece387a8e160cedbb02874c46000b",
+ "samtools-coverage_Mean_depth.txt:md5,4d5f58688b4c653b617c709717475c25",
+ "samtools-coverage_Reads.txt:md5,3667b340251346e538e6f078adcec945",
+ "samtools-flagstat-pct-table.txt:md5,8b0e71fcfbb55f6e8b0e6949fb146e0c",
+ "samtools-flagstat-table.txt:md5,6203dc05b5eaee4f529300986aebbb3c",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e8f2b29a779d322cd56b00f4958ef841",
+ "samtools-stats-dp.txt:md5,07153313edc4f7a3754e9821c85ca0cf",
+ "samtools_alignment_plot.txt:md5,d60abeeecbb005aff19c12f19a726057"
+ ]
+ ],
+ "multiqc_library_plots": [
+ [
+ [
+ "biobambam2_deduplication-cnt.pdf:md5,8dcf3c25c3a6d362a312683b0cc52254",
+ "biobambam2_deduplication-pct.pdf:md5,f38a15e73459aefdbf92f53a602eecab",
+ "fastp-insert-size-plot.pdf:md5,761cc56448ee9500fadf80330b6e6c18",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.pdf:md5,e4ba12f4f0c3961dfe7343a420210f74",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf:md5,cbf4e5d5cd4bccc836ef8a4b00789608",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.pdf:md5,5c452cc418222a26b85bf2779ccc0e5f",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf:md5,148e583db6040c29d07ae06ade0aae37",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.pdf:md5,fdda12e04eceaabad0260e7694ca1a47",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.pdf:md5,f2d6ba7286870d31dbcdfdc501fa0fe4",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.pdf:md5,7fc668801cd69b020c5f0dcb7ab780f4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.pdf:md5,9c21674378164f3bd7010aedaf9f9c62",
+ "fastp-seq-quality-plot_Read_1_After_filtering.pdf:md5,8d69018e6c7babd707ed91a30a2f4373",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.pdf:md5,1c14e7b644546b647e1525b0035d7095",
+ "fastp-seq-quality-plot_Read_2_After_filtering.pdf:md5,d30a990dc6d11a33b3a0bd385b7e2765",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.pdf:md5,569074e2210e477a45c1196d967e0e03",
+ "fastp_filtered_reads_plot-cnt.pdf:md5,1572b3a72a231623c8ae927b4cb7a0ae",
+ "fastp_filtered_reads_plot-pct.pdf:md5,d3a4c1a1372f7b914ae6dac6b0b117aa",
+ "mosdepth-coverage-per-contig-single-cnt.pdf:md5,b532e220dbd44f1b5bccae17f3a423da",
+ "mosdepth-coverage-per-contig-single-pct.pdf:md5,eb539598e0da9e9c0f16033ff345594b",
+ "mosdepth-cumcoverage-dist-id.pdf:md5,017ca25a754de8ad1e59bb8e5f9384a9",
+ "picard_alignment_readlength_plot.pdf:md5,0f360805d8f8d8aeacf3aaae1dc6eb06",
+ "picard_alignment_summary_Aligned_Bases-cnt.pdf:md5,e0e630f9c98be95f6b26b895721925ca",
+ "picard_alignment_summary_Aligned_Bases-pct.pdf:md5,0afa444f1854208d7252dfd45c06a000",
+ "picard_alignment_summary_Aligned_Reads-cnt.pdf:md5,0419bd8fcd699e40575e7c1619937b3e",
+ "picard_alignment_summary_Aligned_Reads-pct.pdf:md5,aa9bb7e84867a2bd953756a95bc0f311",
+ "picard_base_distribution_by_cycle__Adenine.pdf:md5,e5a1c8fd676d7267bf0e16baff152f96",
+ "picard_base_distribution_by_cycle__Cytosine.pdf:md5,8093c223e5fc64be9db36341ee801a6a",
+ "picard_base_distribution_by_cycle__Guanine.pdf:md5,82d32c26160589945f4c395c98220cb4",
+ "picard_base_distribution_by_cycle__Thymine.pdf:md5,1c1ed09619d30f34ce0ddc9464d26706",
+ "picard_base_distribution_by_cycle__Undetermined.pdf:md5,785db14b8f88f7b5675a991172a3ea2a",
+ "picard_hsmetrics_table.pdf:md5,fc9411cf48ebd47c0c261f919849dd46",
+ "picard_percentage_target_bases.pdf:md5,3752afa592927e547bf0c03e1d1006eb",
+ "picard_quality_by_cycle.pdf:md5,673292cc4b18e8cca83522991b81a996",
+ "picard_quality_score_distribution.pdf:md5,88f913aed3ae94590bf10d11a2b59a09",
+ "samtools-coverage-table.pdf:md5,26da9fd5643611f77ae7d511d9b92a04",
+ "samtools-coverage_BQ-cnt.pdf:md5,d2602d8ee5faee419b10283104b12e46",
+ "samtools-coverage_BQ-log.pdf:md5,04983f8664bf34583140efef4594c91d",
+ "samtools-coverage_Bases-cnt.pdf:md5,e7d204151b84a425c030605c40e5ac98",
+ "samtools-coverage_Bases-log.pdf:md5,eb3195e76bc390a13bd786ce17994208",
+ "samtools-coverage_Coverage-cnt.pdf:md5,4cd335d85e8071f4d6b34c07da7e58b3",
+ "samtools-coverage_Coverage-log.pdf:md5,1a6d4126fd6390139db86ac9c59c10b8",
+ "samtools-coverage_MQ-cnt.pdf:md5,19b1ec40e0a622c79429cd2e5db6a2ab",
+ "samtools-coverage_MQ-log.pdf:md5,6bd0213a8e9437ea972d060a45dd32e0",
+ "samtools-coverage_Mean_depth-cnt.pdf:md5,2e6766ac06b6d61b1eec6e5a4a8e773e",
+ "samtools-coverage_Mean_depth-log.pdf:md5,a89995d4c79a6119465fb4899129ef73",
+ "samtools-coverage_Reads-cnt.pdf:md5,f3ed81fba0bd8fdf860db5d4541fb66c",
+ "samtools-coverage_Reads-log.pdf:md5,9aae76e8a17ae18bc7e1ea222736b4ff",
+ "samtools-flagstat-pct-table.pdf:md5,e6debd913a8442f56cc22c714021e0a7",
+ "samtools-flagstat-table.pdf:md5,28f63086a0ac9b57da1f0911b7f8940d",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf:md5,ae4ddcc627dada8d861a8c15e49d97f1",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf:md5,543a323fa0cede66f19ad512222954f4",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf:md5,3e874efbf35563c0e52fd47611822494",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf:md5,c18b4695893cde28c41de39fb16dbcee",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf:md5,d4b9c1b844d0cf4e29d112dc755682b4",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf:md5,f3bef9d1890b8a69acb9c52e07ce7ea3",
+ "samtools-stats-dp.pdf:md5,9872a7fcbd9e6047c6b3c9aca5a36ced",
+ "samtools_alignment_plot-cnt.pdf:md5,288be15b7710eadf32e6ba47511fe140",
+ "samtools_alignment_plot-pct.pdf:md5,6e4103b696b62faaa47989881f202dbe"
+ ],
+ [
+ "biobambam2_deduplication-cnt.png:md5,5707c3cf44cff88666c3c7b4970ab021",
+ "biobambam2_deduplication-pct.png:md5,b2a0fece791ff0532a426f3faeecf3f4",
+ "fastp-insert-size-plot.png:md5,40a7c7edc7062c92d088e8974dd1fbe9",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.png:md5,ff993de7c7a0b2f4dd17aaf509c8209b",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.png:md5,124351c45a1bd7d611fd3ba89510018b",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.png:md5,058842506a3200770c46a4a70b64ce48",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.png:md5,985bf206443edf1417e2a0f9354abe3c",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.png:md5,7855b3938c2b48578b2e1ca3486783de",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.png:md5,b9276b3bd8f2c57a51d12f76273fc322",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.png:md5,45684fe478e5d2912848c032c3bc8ee4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.png:md5,97606f1910cdbb47f68d5b7ac9f9bf4b",
+ "fastp-seq-quality-plot_Read_1_After_filtering.png:md5,44fe9279b3f2279c19d2ce541b9c6c19",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.png:md5,93c06663d6ed02d11f4e5eab97d48917",
+ "fastp-seq-quality-plot_Read_2_After_filtering.png:md5,99219cc1b64c80e6ac8cf653add1990c",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.png:md5,5d655406be9a2ff9a68ec461f51cfcc5",
+ "fastp_filtered_reads_plot-cnt.png:md5,75911dd91d24adfaae185ebcf0a8455a",
+ "fastp_filtered_reads_plot-pct.png:md5,4b3c0fd7f90c7c83b50c557d4aa3b6a5",
+ "mosdepth-coverage-per-contig-single-cnt.png:md5,ff9cec471c8a882b3ad608312b950332",
+ "mosdepth-coverage-per-contig-single-pct.png:md5,8f17612654e4217dd673c2788b473e7c",
+ "mosdepth-cumcoverage-dist-id.png:md5,64f3a8071bca0d22a72c72090b2eb638",
+ "picard_alignment_readlength_plot.png:md5,7c5708c6ed659731111242666746905e",
+ "picard_alignment_summary_Aligned_Bases-cnt.png:md5,ccd4cdf7a4b1f3f2a39adf2e0c700ed4",
+ "picard_alignment_summary_Aligned_Bases-pct.png:md5,de5771f0fc6d2feaf7ea1bef7b4f57ed",
+ "picard_alignment_summary_Aligned_Reads-cnt.png:md5,fa8f7e289fd84f0dfb877758b926c421",
+ "picard_alignment_summary_Aligned_Reads-pct.png:md5,18be469adf5d34e7296aa9e0feb10274",
+ "picard_base_distribution_by_cycle__Adenine.png:md5,b59076e9793e4a403228c477f99c6cf8",
+ "picard_base_distribution_by_cycle__Cytosine.png:md5,7c42741dd1ee386af449d29e21a8389d",
+ "picard_base_distribution_by_cycle__Guanine.png:md5,27a487a8587c180f08d3afb58e71fb17",
+ "picard_base_distribution_by_cycle__Thymine.png:md5,f99b137a9975db372a29c0400652eca4",
+ "picard_base_distribution_by_cycle__Undetermined.png:md5,e7428923e6530f7bd00ca05bf2b0dabe",
+ "picard_hsmetrics_table.png:md5,70c4f98f3056ebd1a5d49f4f91ab3001",
+ "picard_percentage_target_bases.png:md5,1e70e6c776d49296f3f8debc3b893851",
+ "picard_quality_by_cycle.png:md5,23c7dc421bf1a8b9c61e7abdea1b96e9",
+ "picard_quality_score_distribution.png:md5,f129878e0583e69cac53ec51cac62f4e",
+ "samtools-coverage-table.png:md5,ffc0a23dcfe8a1b44e7c585898a412ba",
+ "samtools-coverage_BQ-cnt.png:md5,42a7bfacd302c7924d59701a585957f8",
+ "samtools-coverage_BQ-log.png:md5,67d6d4c8072743a32dfa30dd22edd5fe",
+ "samtools-coverage_Bases-cnt.png:md5,8790b6226f16810deceb82c6834b21be",
+ "samtools-coverage_Bases-log.png:md5,7bdd54947c3ab74d06b9fc11cc35cb51",
+ "samtools-coverage_Coverage-cnt.png:md5,cdff6829f5d017e67668e6b77b8648fd",
+ "samtools-coverage_Coverage-log.png:md5,13441e809c66563bf7284ebe4038f368",
+ "samtools-coverage_MQ-cnt.png:md5,59265e8998386d8a6521296508b4f4e6",
+ "samtools-coverage_MQ-log.png:md5,0282c8f2fb311eb3830f6d33a8e0d2ef",
+ "samtools-coverage_Mean_depth-cnt.png:md5,7f0aa59d888da55c8b7e5ca00011b2fc",
+ "samtools-coverage_Mean_depth-log.png:md5,ab01268969d553decb36658ca785dac0",
+ "samtools-coverage_Reads-cnt.png:md5,f77fe84d95f5bebd12aa764ab377b6e7",
+ "samtools-coverage_Reads-log.png:md5,34d3ebbc83f073531328d633466cfcd9",
+ "samtools-flagstat-pct-table.png:md5,30a84ce2464168d8dedf65b47725e2e1",
+ "samtools-flagstat-table.png:md5,a828ba0e94ebd04d2ac50ecc43b007fd",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png:md5,91267791bafff119d985db6b24f813dc",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png:md5,d1c9fd2633128ed5af7113cedeba91d8",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png:md5,eb81f43f6c5778f957ce85137758235e",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png:md5,b1b15467c4b7e34b2a724c2fe9daefa8",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png:md5,64927987623ac1715e607470f6bf055a",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png:md5,09773cf98a65a96710a4fac9e2600ed9",
+ "samtools-stats-dp.png:md5,fe29585e232244237558512103d78fdc",
+ "samtools_alignment_plot-cnt.png:md5,e5523404a7622df41efaf24fb98ef4c5",
+ "samtools_alignment_plot-pct.png:md5,7945231e29b09915dee17a9fa620ef62"
+ ],
+ [
+ "biobambam2_deduplication-cnt.svg:md5,effd09d8ad9d34872090a0bae6f5e967",
+ "biobambam2_deduplication-pct.svg:md5,e58bfa9f92464f78673fd1ad9e2450d0",
+ "fastp-insert-size-plot.svg:md5,83bcd604041b4fa6053dcb0d33f21fed",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.svg:md5,03a57f9e891bb8aeac9a4979b0e7e513",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.svg:md5,fe77090c3ee62106e5cdd0d243744ced",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.svg:md5,fc70efca2a6feb2ebd02712323ab858f",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.svg:md5,a9aeaf418a4af53db36fa495652538b5",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.svg:md5,c45ccd2c9670cfc6a8fe7e7c411fa792",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.svg:md5,78d3817a16b013f647a23564878f1542",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.svg:md5,f33d2472e82e715f9d33b6781d4671b2",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.svg:md5,e7bdb138105422f2eca236628ac1c024",
+ "fastp-seq-quality-plot_Read_1_After_filtering.svg:md5,353db00f7a3f20c0c07838236e88a5ed",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.svg:md5,69cef5512260a6af8955d9785966a806",
+ "fastp-seq-quality-plot_Read_2_After_filtering.svg:md5,46f0ee90d934323da913b14927888a75",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.svg:md5,bf833093bbc86d88a297d48ac7ad64ad",
+ "fastp_filtered_reads_plot-cnt.svg:md5,89f162c2fe82f89d487564c26b007003",
+ "fastp_filtered_reads_plot-pct.svg:md5,74c611b014426ffc6990fd278dd5077d",
+ "mosdepth-coverage-per-contig-single-cnt.svg:md5,4e8ee59993d08a72eb4545fb8378a8ba",
+ "mosdepth-coverage-per-contig-single-pct.svg:md5,6c79f39035c6cb6db7f135eefb155a0e",
+ "mosdepth-cumcoverage-dist-id.svg:md5,587529190643bec79f4c4da65e68fdae",
+ "picard_alignment_readlength_plot.svg:md5,b0bf8f98c4bfd66b8848b5cf645812a6",
+ "picard_alignment_summary_Aligned_Bases-cnt.svg:md5,1e4c349f358aa1375f00eeb19a638898",
+ "picard_alignment_summary_Aligned_Bases-pct.svg:md5,1b2f81b0a0a23d54f62946a266d352b1",
+ "picard_alignment_summary_Aligned_Reads-cnt.svg:md5,9ee533f876f4af410f0fdd3da6427d89",
+ "picard_alignment_summary_Aligned_Reads-pct.svg:md5,713905bb8f964ccbf5d0b730447ae9a1",
+ "picard_base_distribution_by_cycle__Adenine.svg:md5,1a8b1b45ba9b22e9c230adcfce962dd8",
+ "picard_base_distribution_by_cycle__Cytosine.svg:md5,82a8225f9561a6296aa0b2bb801bf568",
+ "picard_base_distribution_by_cycle__Guanine.svg:md5,a3bb637662550e5712909ebb90268b11",
+ "picard_base_distribution_by_cycle__Thymine.svg:md5,316858766a810aa7bac94e9fa82f6a0e",
+ "picard_base_distribution_by_cycle__Undetermined.svg:md5,f09460fa07c95a4b8d326c62eaeb7099",
+ "picard_hsmetrics_table.svg:md5,2882442c46a78a971612f03b60cdc9a7",
+ "picard_percentage_target_bases.svg:md5,bf71b0901b3f91350ea786c293500cd9",
+ "picard_quality_by_cycle.svg:md5,83b907ec1941f942498b8c19ac15d335",
+ "picard_quality_score_distribution.svg:md5,4b5a6ac776863aab6a0874a1788e838c",
+ "samtools-coverage-table.svg:md5,1d344020db642dc8ed73ce65384eaed9",
+ "samtools-coverage_BQ-cnt.svg:md5,e618e68a0e1d475030a5b86d05217ae6",
+ "samtools-coverage_BQ-log.svg:md5,d7af1801f148ea9bda9c0d105afc8270",
+ "samtools-coverage_Bases-cnt.svg:md5,af0bf231e9dfc5545686c9d0d7fc0bac",
+ "samtools-coverage_Bases-log.svg:md5,d6070217bb54d7f966b21c8563571945",
+ "samtools-coverage_Coverage-cnt.svg:md5,ffeb1e8ffd6318d30c9ffd72f8701eb8",
+ "samtools-coverage_Coverage-log.svg:md5,81aafb2970773832ccc95a6a87c0db12",
+ "samtools-coverage_MQ-cnt.svg:md5,9aaa9307dbe314b04e1e2f78dec852db",
+ "samtools-coverage_MQ-log.svg:md5,e530d20e0b9ac5ea89a1d7e99e561da3",
+ "samtools-coverage_Mean_depth-cnt.svg:md5,b3366c179f143419ef91bc2016e717d2",
+ "samtools-coverage_Mean_depth-log.svg:md5,c13a4e5c2f1e78b77c5bed76598d3e6b",
+ "samtools-coverage_Reads-cnt.svg:md5,153e7705058794c16bee02ce37daba50",
+ "samtools-coverage_Reads-log.svg:md5,68f3871ec68b060e54380d353e1a0ded",
+ "samtools-flagstat-pct-table.svg:md5,7a64df60de3c53a62ce1b9bc62d1e600",
+ "samtools-flagstat-table.svg:md5,9d6e77d29691f652ed21a493866c226b",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg:md5,aee092dd5c492ae70e542cab5b11e8a6",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg:md5,a7ef56dd58e80e225252e5bd78c830f2",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg:md5,613dcab15c764fafd2151da9b3d5c55e",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg:md5,b1f82c95aed78d4e219f16cc7d3f41c3",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg:md5,4855e19f8503ef463a338bfcab7af3a5",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg:md5,b98efafd11eea5fd5292e247d4530821",
+ "samtools-stats-dp.svg:md5,5c9cc7aeefc2a540d2b93bcdeda7aa39",
+ "samtools_alignment_plot-cnt.svg:md5,0a2910be102b4c0ef6ac156a25a67005",
+ "samtools_alignment_plot-pct.svg:md5,061886f9d0f5839eccb706a784f7eec7"
+ ]
+ ]
+ ],
+ "multiqc_library_report": [
+ "multiqc_library_test.html:md5,20fd67ac14ace887e5f5b76f02dc2b20"
+ ],
+ "multiqc_main_data": [
+ [
+ [
+ "llms-full.txt:md5,769bfe8a8b5b73ff5e31e480d5d129c9",
+ "multiqc.log:md5,1ec335a68a9d72f823a7bf0bf42e028c",
+ "multiqc.parquet:md5,73d600bb80fc3459bfba5edc970fc949",
+ "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f",
+ "multiqc_data.json:md5,8ad88f47321bfad770cdc2387d5fa6f9",
+ "multiqc_software_versions.txt:md5,3e70a45b35aa87dab44c6b2b61033f14",
+ "multiqc_sources.txt:md5,d2a044df39ce3c6abe5cdc2d67473490"
+ ]
+ ]
],
- "multiqc_plots": [
- "multiqc_plots"
+ "multiqc_main_plots": [
+ [
+
+ ]
],
- "multiqc_report": [
+ "multiqc_main_report": [
[
- "multiqc_report.html"
+ "multiqc.html:md5,a05f843b1b044c86a850de70980b8af2"
]
],
"panelcoverage": [
@@ -403,6 +687,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -429,6 +714,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -460,6 +746,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -485,6 +772,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -511,6 +799,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -537,6 +826,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -563,6 +853,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -589,6 +880,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -632,7 +924,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:07:39.314799"
+ "timestamp": "2025-12-04T19:48:21.07529"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -655,6 +947,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -690,6 +983,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"readgroup": {
"CN": "CMGG",
@@ -713,6 +1007,7 @@
{
"id": "sample1",
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -755,6 +1050,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"sample_type": "DNA",
@@ -802,15 +1098,162 @@
"mosdepth_thresholds_csi": [
],
- "multiqc_data": [
- "multiqc_data"
+ "multiqc_library_data": [
+ [
+ "biobambam2_deduplication.txt:md5,992b5decb6d017254ee9b02fbe076d81",
+ "fastp-insert-size-plot.txt:md5,66fec5f01198da8ecd97410ec1727021",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,23420affa90c1523becba23c09653a92",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,27bb3440b4edeab8a9dc2ec1077cfc0e",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,e49276ebe93bb8294ca51e6a0916e703",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,f7bf2354433b3514893f0fe18e7f7877",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,6c20997febd11ea6c80fe13a1761898b",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,a1d1cdbb1a1fb48b6d6bdf1f2192b2b7",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,e1d8dcf05d785f863cfb17c96c1f58a4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,30bfcca763531e4ee1638031d5359e48",
+ "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,2b0a42468f68992639ac8eacbf533134",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,4e6fea487fecc2ee55db1518ff30a0b5",
+ "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,72a6d8295748db4de13d6dc1d1eb83dc",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,3b1c7675660e838e75d1d5c62c0f3a61",
+ "fastp_filtered_reads_plot.txt:md5,9e506f1c8dbad71540697d11af4ba6df",
+ "llms-full.txt:md5,02c5ed19814d3afd16ea5fccc3516865",
+ "multiqc.log:md5,faa526e1b74af6acf779e92caf5bd77a",
+ "multiqc.parquet:md5,f991c38b80ea4795193224a782e94750",
+ "multiqc_biobambam2_dups.txt:md5,31c942ce8964d0941cb79f8c9de8aa04",
+ "multiqc_citations.txt:md5,b64ab308dbc3a2e58e15527370655958",
+ "multiqc_data.json:md5,ea17bc7fc0063bb30073f9b5b3cc7bfb",
+ "multiqc_fastp.txt:md5,f917618024634bb24850390c8f4836e7",
+ "multiqc_general_stats.txt:md5,21152415bf3b3720dede9ada054ae5e1",
+ "multiqc_samtools_flagstat.txt:md5,5ce133683245100011b77cd676471de1",
+ "multiqc_samtools_idxstats.txt:md5,7e542f20dd27d352b5d2be33e1920220",
+ "multiqc_samtools_stats.txt:md5,1dd571a033605b1224ebac95deceee0b",
+ "multiqc_sources.txt:md5,08a7aa04a68650ae860f494ae1b5d4d2",
+ "samtools-flagstat-pct-table.txt:md5,8b0e71fcfbb55f6e8b0e6949fb146e0c",
+ "samtools-flagstat-table.txt:md5,6203dc05b5eaee4f529300986aebbb3c",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e8f2b29a779d322cd56b00f4958ef841",
+ "samtools-stats-dp.txt:md5,07153313edc4f7a3754e9821c85ca0cf",
+ "samtools_alignment_plot.txt:md5,d60abeeecbb005aff19c12f19a726057"
+ ]
+ ],
+ "multiqc_library_plots": [
+ [
+ [
+ "biobambam2_deduplication-cnt.pdf:md5,32dc6feb5cfb2a681e1baea64ed174d2",
+ "biobambam2_deduplication-pct.pdf:md5,c210b96ff301c4699a981b7a747dd642",
+ "fastp-insert-size-plot.pdf:md5,ac28b57e2270b846462ec69d469403de",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.pdf:md5,70fc95d50564a9e34ffedaab55c7e3a3",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf:md5,bfdadfab1ef45191268e8f19b5b56756",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.pdf:md5,be9b2f8bb0276f4da8cf20595035bb33",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf:md5,a00ca04dd4577aa4706975016bf82618",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.pdf:md5,9dd66bed0bb685993e1ac70aad2405a1",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.pdf:md5,95d07c4ea09e4ffb8473e84648eea599",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.pdf:md5,c9550470037ba6eec53118c5db3ed62a",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.pdf:md5,9a9dff340890cd43c6ee7a689112c49e",
+ "fastp-seq-quality-plot_Read_1_After_filtering.pdf:md5,e3f499d8d0ccf8bf0df604e96f7be9cb",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.pdf:md5,c490b53f4a9cddbd3659256aedbeb4cd",
+ "fastp-seq-quality-plot_Read_2_After_filtering.pdf:md5,31011ec67fc23ff867c60c45b9681396",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.pdf:md5,b75dad16330483e160720bd89649167d",
+ "fastp_filtered_reads_plot-cnt.pdf:md5,e34eea79aa92a8f0a1cafa522d1204f3",
+ "fastp_filtered_reads_plot-pct.pdf:md5,0f6b66deb6fbff878987ca29069cb016",
+ "samtools-flagstat-pct-table.pdf:md5,781be091183f24877110f8d5be0ebbec",
+ "samtools-flagstat-table.pdf:md5,bc1eff95cf645832e0dee6d86bcf503b",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf:md5,f392b8070efe5b7a4bd20993c0e66bfa",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf:md5,282ddb8116e7c774149d24015d2a56bd",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf:md5,824315ee6e029d3b42f37f02b9374734",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf:md5,cd587a5ace7868b2b24fdd16ad079e40",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf:md5,2be7c8ff5b10d0ee1fb6b01f4c2100ee",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf:md5,f2caf54746b77da42fe4200fc1f2eb96",
+ "samtools-stats-dp.pdf:md5,8b63ef11ded4b2224f9d5f6d3f059c7a",
+ "samtools_alignment_plot-cnt.pdf:md5,3d6c545941eec5834f4c991ecf0be42c",
+ "samtools_alignment_plot-pct.pdf:md5,a62b1d31109315eacb4ce42c63ae0aef"
+ ],
+ [
+ "biobambam2_deduplication-cnt.png:md5,5707c3cf44cff88666c3c7b4970ab021",
+ "biobambam2_deduplication-pct.png:md5,b2a0fece791ff0532a426f3faeecf3f4",
+ "fastp-insert-size-plot.png:md5,40a7c7edc7062c92d088e8974dd1fbe9",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.png:md5,ff993de7c7a0b2f4dd17aaf509c8209b",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.png:md5,124351c45a1bd7d611fd3ba89510018b",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.png:md5,058842506a3200770c46a4a70b64ce48",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.png:md5,985bf206443edf1417e2a0f9354abe3c",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.png:md5,7855b3938c2b48578b2e1ca3486783de",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.png:md5,b9276b3bd8f2c57a51d12f76273fc322",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.png:md5,45684fe478e5d2912848c032c3bc8ee4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.png:md5,97606f1910cdbb47f68d5b7ac9f9bf4b",
+ "fastp-seq-quality-plot_Read_1_After_filtering.png:md5,44fe9279b3f2279c19d2ce541b9c6c19",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.png:md5,93c06663d6ed02d11f4e5eab97d48917",
+ "fastp-seq-quality-plot_Read_2_After_filtering.png:md5,99219cc1b64c80e6ac8cf653add1990c",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.png:md5,5d655406be9a2ff9a68ec461f51cfcc5",
+ "fastp_filtered_reads_plot-cnt.png:md5,75911dd91d24adfaae185ebcf0a8455a",
+ "fastp_filtered_reads_plot-pct.png:md5,4b3c0fd7f90c7c83b50c557d4aa3b6a5",
+ "samtools-flagstat-pct-table.png:md5,30a84ce2464168d8dedf65b47725e2e1",
+ "samtools-flagstat-table.png:md5,a828ba0e94ebd04d2ac50ecc43b007fd",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png:md5,91267791bafff119d985db6b24f813dc",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png:md5,d1c9fd2633128ed5af7113cedeba91d8",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png:md5,eb81f43f6c5778f957ce85137758235e",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png:md5,b1b15467c4b7e34b2a724c2fe9daefa8",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png:md5,64927987623ac1715e607470f6bf055a",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png:md5,09773cf98a65a96710a4fac9e2600ed9",
+ "samtools-stats-dp.png:md5,fe29585e232244237558512103d78fdc",
+ "samtools_alignment_plot-cnt.png:md5,e5523404a7622df41efaf24fb98ef4c5",
+ "samtools_alignment_plot-pct.png:md5,7945231e29b09915dee17a9fa620ef62"
+ ],
+ [
+ "biobambam2_deduplication-cnt.svg:md5,9de3a4196707cc54a09ccab579551b45",
+ "biobambam2_deduplication-pct.svg:md5,383483ee720a0b93282f11cef90d8412",
+ "fastp-insert-size-plot.svg:md5,03e25e27d6f08e7eeef62edaac78705d",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.svg:md5,16db74211fea2dd026208e1ff8932921",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.svg:md5,ebce58ed6cef4ed79ea2ddd5d796e61e",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.svg:md5,2e6b93f07296d37a5fd08f493793ecf2",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.svg:md5,865602ee9731648cf55a8f6c6e3fcb20",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.svg:md5,c38f3a392319e4b9e2147a96b33e1186",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.svg:md5,b8416f1f456e3a189822f22c26e388ad",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.svg:md5,5c54a86a023e9ac204ece6eca7f4da3d",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.svg:md5,74ecf94d1bc8a2ea1315bad82e8da636",
+ "fastp-seq-quality-plot_Read_1_After_filtering.svg:md5,2136357bde8a33774139d892f78f24f8",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.svg:md5,79c1c221969bdbcd7254eb8d9c6e15f2",
+ "fastp-seq-quality-plot_Read_2_After_filtering.svg:md5,a55b84e706aa6aaa796e74f29bc32ec7",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.svg:md5,ddfc609e5a87d598e8abe9777130e8e6",
+ "fastp_filtered_reads_plot-cnt.svg:md5,5fd1528dbf165823db88a7cf666ecb23",
+ "fastp_filtered_reads_plot-pct.svg:md5,d8adcea8718c87a360b9d329e31cc64b",
+ "samtools-flagstat-pct-table.svg:md5,3a27df4db014b18226c51f41868c8387",
+ "samtools-flagstat-table.svg:md5,0c0bca9b4b56b6f1a7bac9b23be4bbe4",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg:md5,62227493b8c1c4abf2b9a56dee4aaee1",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg:md5,7e0a96a8947202ada7f3539f614aafbd",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg:md5,addf085c4878ef4c72bf2de0b1da73c5",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg:md5,198bee66f3e5232a1f389abf312f3230",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg:md5,1e1de4b4dfdaebb6c6c9cb6ecf78fc0d",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg:md5,2a42c274765d0a37f3eeef4b605ad55c",
+ "samtools-stats-dp.svg:md5,c3d026b17b884a56736a66cdba55865b",
+ "samtools_alignment_plot-cnt.svg:md5,55cf5b87a08d2fb1c4ee34099146a8b1",
+ "samtools_alignment_plot-pct.svg:md5,123f6620c817c04bb14336aae67dcaac"
+ ]
+ ]
],
- "multiqc_plots": [
- "multiqc_plots"
+ "multiqc_library_report": [
+ "multiqc_library_test.html:md5,379d95b311027e666745448a9e27fe65"
],
- "multiqc_report": [
+ "multiqc_main_data": [
[
- "multiqc_report.html"
+ [
+ "llms-full.txt:md5,d188ca7a55d62d188c5c13608585d75c",
+ "multiqc.log:md5,4832cad68754c77e2de90985272b0342",
+ "multiqc.parquet:md5,182ff0904414468b20c9197f08ecf956",
+ "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f",
+ "multiqc_data.json:md5,a9e50ebc69822d508d72da06c16bf9ff",
+ "multiqc_software_versions.txt:md5,4e94b4dd017aacfd34b89230176af1af",
+ "multiqc_sources.txt:md5,d2a044df39ce3c6abe5cdc2d67473490"
+ ]
+ ]
+ ],
+ "multiqc_main_plots": [
+ [
+
+ ]
+ ],
+ "multiqc_main_report": [
+ [
+ "multiqc.html:md5,f3b0258eb0cd1c0ee4f206368de6b662"
]
],
"panelcoverage": [
@@ -837,6 +1280,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -863,6 +1307,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -889,6 +1334,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -915,6 +1361,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
@@ -954,7 +1401,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:12:08.110112"
+ "timestamp": "2025-12-04T19:54:04.990092"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -977,6 +1424,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"sample_type": "DNA",
"samplename": "sample1",
@@ -1011,6 +1459,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"readgroup": {
"CN": "CMGG",
@@ -1033,6 +1482,7 @@
{
"id": "sample1",
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1074,6 +1524,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"sample_type": "DNA",
"samplename": "sample1",
@@ -1090,6 +1541,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1115,6 +1567,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1140,6 +1593,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1168,6 +1622,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1193,6 +1648,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1227,6 +1683,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1252,15 +1709,290 @@
"mosdepth_thresholds_csi": [
],
- "multiqc_data": [
- "multiqc_data"
+ "multiqc_library_data": [
+ [
+ "biobambam2_deduplication.txt:md5,992b5decb6d017254ee9b02fbe076d81",
+ "fastp-insert-size-plot.txt:md5,66fec5f01198da8ecd97410ec1727021",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,23420affa90c1523becba23c09653a92",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,27bb3440b4edeab8a9dc2ec1077cfc0e",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,e49276ebe93bb8294ca51e6a0916e703",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,f7bf2354433b3514893f0fe18e7f7877",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,6c20997febd11ea6c80fe13a1761898b",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,a1d1cdbb1a1fb48b6d6bdf1f2192b2b7",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,e1d8dcf05d785f863cfb17c96c1f58a4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,30bfcca763531e4ee1638031d5359e48",
+ "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,2b0a42468f68992639ac8eacbf533134",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,4e6fea487fecc2ee55db1518ff30a0b5",
+ "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,72a6d8295748db4de13d6dc1d1eb83dc",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,3b1c7675660e838e75d1d5c62c0f3a61",
+ "fastp_filtered_reads_plot.txt:md5,9e506f1c8dbad71540697d11af4ba6df",
+ "llms-full.txt:md5,5f245d44b703b37991e2130e2247adb9",
+ "mosdepth-coverage-per-contig-single.txt:md5,0c5d8872c18169b771168ca9fa7d40b2",
+ "mosdepth-cumcoverage-dist-id.txt:md5,2592e72a312feb3363dece668fb2ea90",
+ "mosdepth_cov_dist.txt:md5,f74eeba67b67d59def037884af206551",
+ "mosdepth_cumcov_dist.txt:md5,f74eeba67b67d59def037884af206551",
+ "mosdepth_perchrom.txt:md5,0c5d8872c18169b771168ca9fa7d40b2",
+ "multiqc.log:md5,443bae2f4f1af6e82ae0c2623b5d5b26",
+ "multiqc.parquet:md5,64c797120e6fe75c00726dd5a05b8613",
+ "multiqc_biobambam2_dups.txt:md5,31c942ce8964d0941cb79f8c9de8aa04",
+ "multiqc_citations.txt:md5,294fadee817c59c64f1b985ac204b224",
+ "multiqc_data.json:md5,b021f17bc01883a1e6bb04642de162ba",
+ "multiqc_fastp.txt:md5,f917618024634bb24850390c8f4836e7",
+ "multiqc_general_stats.txt:md5,94493aa967cdafb4c5f78b8981b1a185",
+ "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3f32124a666ad5fa6dda93759cf450f0",
+ "multiqc_picard_baseContent.txt:md5,deba2098af2de348792a37b405eab78c",
+ "multiqc_picard_quality_by_cycle.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
+ "multiqc_picard_quality_score_distribution.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
+ "multiqc_picard_wgsmetrics.txt:md5,54691f0bafd26c22b3339ac5133e3e59",
+ "multiqc_samtools_coverage.txt:md5,2b8ac198265a850d581d453eacb402cd",
+ "multiqc_samtools_flagstat.txt:md5,5ce133683245100011b77cd676471de1",
+ "multiqc_samtools_idxstats.txt:md5,7e542f20dd27d352b5d2be33e1920220",
+ "multiqc_samtools_stats.txt:md5,1dd571a033605b1224ebac95deceee0b",
+ "multiqc_sources.txt:md5,8bbd0fb5a901bd8e6da470a94357b8c7",
+ "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "picard_MeanQualityByCycle_histogram_1.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
+ "picard_QualityScoreDistribution_histogram.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
+ "picard_alignment_readlength_plot.txt:md5,891edbc18f01189de8c5bf52320ee6c7",
+ "picard_alignment_summary_Aligned_Bases.txt:md5,7d13622d8d4083fe2a4be5bf92ea77e6",
+ "picard_alignment_summary_Aligned_Reads.txt:md5,ed831c3df4e4465d9c6fb52ce731ee71",
+ "picard_base_distribution_by_cycle__Adenine.txt:md5,989b9c396dfa032d8ca02f57b7cc6e7d",
+ "picard_base_distribution_by_cycle__Cytosine.txt:md5,dc7b79f9ab4bc66db25b509e423abf2b",
+ "picard_base_distribution_by_cycle__Guanine.txt:md5,1f2a16426851c0e434558d437ac482e3",
+ "picard_base_distribution_by_cycle__Thymine.txt:md5,cbc90b7275fa29bf09d4be71fc443df1",
+ "picard_base_distribution_by_cycle__Undetermined.txt:md5,e0a643aff9cf4b0d277c4da6c798c6dc",
+ "picard_quality_by_cycle.txt:md5,f89d83da6f5a7fa00511a8959c2bd3c2",
+ "picard_quality_score_distribution.txt:md5,9d72562e154dba19a69180e2875ae8e9",
+ "picard_wgs_metrics_bases.txt:md5,5efebe4a352e7d44392faded88e10ec9",
+ "picard_wgs_metrics_histogram_Counts_Histogram.txt:md5,681e302aec63d9b5fa8966ee8ee2373a",
+ "picard_wgs_metrics_histogram_Percentage_Drop-Off.txt:md5,b37badd0338d073b2557c2492c472280",
+ "samtools-coverage-table.txt:md5,0f9fe2b460eb659d5ce23deba4ee62d8",
+ "samtools-coverage_BQ.txt:md5,68b97b7434bd35c71d3d14de478ba1b9",
+ "samtools-coverage_Bases.txt:md5,f8fcf650945e7b347409d678fae3b006",
+ "samtools-coverage_Coverage.txt:md5,bc62f359fced9778f869022dd4ab6647",
+ "samtools-coverage_MQ.txt:md5,5f9ece387a8e160cedbb02874c46000b",
+ "samtools-coverage_Mean_depth.txt:md5,4d5f58688b4c653b617c709717475c25",
+ "samtools-coverage_Reads.txt:md5,3667b340251346e538e6f078adcec945",
+ "samtools-flagstat-pct-table.txt:md5,8b0e71fcfbb55f6e8b0e6949fb146e0c",
+ "samtools-flagstat-table.txt:md5,6203dc05b5eaee4f529300986aebbb3c",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e8f2b29a779d322cd56b00f4958ef841",
+ "samtools-stats-dp.txt:md5,07153313edc4f7a3754e9821c85ca0cf",
+ "samtools_alignment_plot.txt:md5,d60abeeecbb005aff19c12f19a726057"
+ ]
],
- "multiqc_plots": [
- "multiqc_plots"
+ "multiqc_library_plots": [
+ [
+ [
+ "biobambam2_deduplication-cnt.pdf:md5,076943b1c590633eede4b60e8aa2434c",
+ "biobambam2_deduplication-pct.pdf:md5,32d4caca75efe889205de73e3a0a4d97",
+ "fastp-insert-size-plot.pdf:md5,f1023409a45dc9d8a0931659b0dc697d",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.pdf:md5,acbf529d4de4de437a3b71ef99d27698",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf:md5,04621f82d0b3f8d97bf99b8d59b9988e",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.pdf:md5,9e23be66eacb942bd55f0459836bc111",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf:md5,93b6b5bda685f45fb8c81747d0bccd7f",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.pdf:md5,a8c81efa4e85a5258b6c8930d5543c3d",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.pdf:md5,5fe572924ab5149f71f9c33a3aa2ef26",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.pdf:md5,6332b41f6963f9c9a0ef57e307cd636c",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.pdf:md5,25511034f06bb9c2d1ba499568285338",
+ "fastp-seq-quality-plot_Read_1_After_filtering.pdf:md5,a5d9dbd669760bd35cabff4a957c72e0",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.pdf:md5,5d8a4222b4d43f2383759d6612faf1af",
+ "fastp-seq-quality-plot_Read_2_After_filtering.pdf:md5,5eaaa59e813d0b5e86c833fa7030fa63",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.pdf:md5,8386c931c7b0ccd2f1fda5caa10d4612",
+ "fastp_filtered_reads_plot-cnt.pdf:md5,07f08edd555887949d5732358c2adf56",
+ "fastp_filtered_reads_plot-pct.pdf:md5,25516919ae1120b1e05ad36a296ae49e",
+ "mosdepth-coverage-per-contig-single-cnt.pdf:md5,e31c2589a014aa1e1e6ac997119ad675",
+ "mosdepth-coverage-per-contig-single-pct.pdf:md5,6435a5fe0f4b51d95e6a4b6acdd2f3d5",
+ "mosdepth-cumcoverage-dist-id.pdf:md5,5d4af4029371ddba1ed19ed38f88c8f2",
+ "picard_alignment_readlength_plot.pdf:md5,aa1f2ae479ecae2c3ab65cf265987258",
+ "picard_alignment_summary_Aligned_Bases-cnt.pdf:md5,13b9efa703cde16499f597103e511ce9",
+ "picard_alignment_summary_Aligned_Bases-pct.pdf:md5,5d53049cb3bfe99985fbf840095b960f",
+ "picard_alignment_summary_Aligned_Reads-cnt.pdf:md5,89bd672088e27c155cf2d5a06f8b03b4",
+ "picard_alignment_summary_Aligned_Reads-pct.pdf:md5,ea3c23c71d88ceba0cb38629cb5ed9bd",
+ "picard_base_distribution_by_cycle__Adenine.pdf:md5,0305b7ed8db6442e58f6df0939aae0c2",
+ "picard_base_distribution_by_cycle__Cytosine.pdf:md5,9fc115666272868eea3201b4ad329e6f",
+ "picard_base_distribution_by_cycle__Guanine.pdf:md5,ea999ac900f032148ef8dc8311fbaf21",
+ "picard_base_distribution_by_cycle__Thymine.pdf:md5,75fee9ea401481bd3a89d2e9dbc93b64",
+ "picard_base_distribution_by_cycle__Undetermined.pdf:md5,5084d6ea1d038c2ad803ee61ea3d4beb",
+ "picard_quality_by_cycle.pdf:md5,d46426fb7f451c50f7ea3900fbee909c",
+ "picard_quality_score_distribution.pdf:md5,c4bace227e4be936499b16d8b791c4d2",
+ "picard_wgs_metrics_bases.pdf:md5,8f385b4242b2839521d355da67d1601c",
+ "picard_wgs_metrics_histogram_Counts_Histogram.pdf:md5,6d1fd94aab4dae5f06f9ab2fd18a2d14",
+ "picard_wgs_metrics_histogram_Percentage_Drop-Off.pdf:md5,2973a0bd94ce539443fe3f144d60a57d",
+ "samtools-coverage-table.pdf:md5,43f6c1db01c3d6e0cbeb598d8462c3bb",
+ "samtools-coverage_BQ-cnt.pdf:md5,a0e08adcfcf5963508675e5f73f3ddc4",
+ "samtools-coverage_BQ-log.pdf:md5,7cfa56d3008e2cbdd5ac1e6dd01a0da5",
+ "samtools-coverage_Bases-cnt.pdf:md5,fe22f1634930da794d44c425cd3f9f75",
+ "samtools-coverage_Bases-log.pdf:md5,a91260f7858bb59b05994a60c98b3d09",
+ "samtools-coverage_Coverage-cnt.pdf:md5,28224f499e3b6101c2996159f75e52b6",
+ "samtools-coverage_Coverage-log.pdf:md5,d24bb4c34863c442d9081d8c8c2ec92a",
+ "samtools-coverage_MQ-cnt.pdf:md5,be7f66cb438e5857125034f8308f1a9d",
+ "samtools-coverage_MQ-log.pdf:md5,0e67e1921c296fa19c8fc5b5b2808a4d",
+ "samtools-coverage_Mean_depth-cnt.pdf:md5,2422e0664ff8f9e22a64e9f60c29dc01",
+ "samtools-coverage_Mean_depth-log.pdf:md5,ccb6cda145cf3e19266e2de300bf5107",
+ "samtools-coverage_Reads-cnt.pdf:md5,be0940f017942fd1ea7eb3b7472e78a9",
+ "samtools-coverage_Reads-log.pdf:md5,147469231619cf8c5a1bcbfedd1536f9",
+ "samtools-flagstat-pct-table.pdf:md5,4da35ccf697cab3209ff58e65ea22985",
+ "samtools-flagstat-table.pdf:md5,ecf1cd68a33e2ffacd09bc26acd78c4f",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf:md5,564d74b6292e8e644e80ebbc4f36cbe3",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf:md5,008360a325c47b0eba81acf03f486221",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf:md5,7e7b33224bcf3053b9f074c70d0e4342",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf:md5,9f8fc3a6ff912245f7a3c5189bf9fcb1",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf:md5,f4d9ff73a8b429e998c0fcbc143c468e",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf:md5,eccf04a5b6928eaf4306b7404f2fd945",
+ "samtools-stats-dp.pdf:md5,022199feb31379c5b5fb74ee031d8697",
+ "samtools_alignment_plot-cnt.pdf:md5,889e13551f5a50465e5046bd101e8647",
+ "samtools_alignment_plot-pct.pdf:md5,d66282dbb006fcae5f4c582f7892ca43"
+ ],
+ [
+ "biobambam2_deduplication-cnt.png:md5,5707c3cf44cff88666c3c7b4970ab021",
+ "biobambam2_deduplication-pct.png:md5,b2a0fece791ff0532a426f3faeecf3f4",
+ "fastp-insert-size-plot.png:md5,40a7c7edc7062c92d088e8974dd1fbe9",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.png:md5,ff993de7c7a0b2f4dd17aaf509c8209b",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.png:md5,124351c45a1bd7d611fd3ba89510018b",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.png:md5,058842506a3200770c46a4a70b64ce48",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.png:md5,985bf206443edf1417e2a0f9354abe3c",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.png:md5,7855b3938c2b48578b2e1ca3486783de",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.png:md5,b9276b3bd8f2c57a51d12f76273fc322",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.png:md5,45684fe478e5d2912848c032c3bc8ee4",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.png:md5,97606f1910cdbb47f68d5b7ac9f9bf4b",
+ "fastp-seq-quality-plot_Read_1_After_filtering.png:md5,44fe9279b3f2279c19d2ce541b9c6c19",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.png:md5,93c06663d6ed02d11f4e5eab97d48917",
+ "fastp-seq-quality-plot_Read_2_After_filtering.png:md5,99219cc1b64c80e6ac8cf653add1990c",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.png:md5,5d655406be9a2ff9a68ec461f51cfcc5",
+ "fastp_filtered_reads_plot-cnt.png:md5,75911dd91d24adfaae185ebcf0a8455a",
+ "fastp_filtered_reads_plot-pct.png:md5,4b3c0fd7f90c7c83b50c557d4aa3b6a5",
+ "mosdepth-coverage-per-contig-single-cnt.png:md5,4d6f6bf53791c7438153194cf5c28b58",
+ "mosdepth-coverage-per-contig-single-pct.png:md5,8f17612654e4217dd673c2788b473e7c",
+ "mosdepth-cumcoverage-dist-id.png:md5,9a1b83a02f39658f5896ed4b665f7327",
+ "picard_alignment_readlength_plot.png:md5,7c5708c6ed659731111242666746905e",
+ "picard_alignment_summary_Aligned_Bases-cnt.png:md5,ccd4cdf7a4b1f3f2a39adf2e0c700ed4",
+ "picard_alignment_summary_Aligned_Bases-pct.png:md5,de5771f0fc6d2feaf7ea1bef7b4f57ed",
+ "picard_alignment_summary_Aligned_Reads-cnt.png:md5,fa8f7e289fd84f0dfb877758b926c421",
+ "picard_alignment_summary_Aligned_Reads-pct.png:md5,18be469adf5d34e7296aa9e0feb10274",
+ "picard_base_distribution_by_cycle__Adenine.png:md5,b59076e9793e4a403228c477f99c6cf8",
+ "picard_base_distribution_by_cycle__Cytosine.png:md5,7c42741dd1ee386af449d29e21a8389d",
+ "picard_base_distribution_by_cycle__Guanine.png:md5,27a487a8587c180f08d3afb58e71fb17",
+ "picard_base_distribution_by_cycle__Thymine.png:md5,f99b137a9975db372a29c0400652eca4",
+ "picard_base_distribution_by_cycle__Undetermined.png:md5,e7428923e6530f7bd00ca05bf2b0dabe",
+ "picard_quality_by_cycle.png:md5,23c7dc421bf1a8b9c61e7abdea1b96e9",
+ "picard_quality_score_distribution.png:md5,f129878e0583e69cac53ec51cac62f4e",
+ "picard_wgs_metrics_bases.png:md5,6ae01c3c3e7a7f6bac5dd44e0e29dd6a",
+ "picard_wgs_metrics_histogram_Counts_Histogram.png:md5,cfd66c498f788418c650ec052c12c737",
+ "picard_wgs_metrics_histogram_Percentage_Drop-Off.png:md5,2b050e4750a49c843e8fd8a1c2e01424",
+ "samtools-coverage-table.png:md5,ffc0a23dcfe8a1b44e7c585898a412ba",
+ "samtools-coverage_BQ-cnt.png:md5,42a7bfacd302c7924d59701a585957f8",
+ "samtools-coverage_BQ-log.png:md5,67d6d4c8072743a32dfa30dd22edd5fe",
+ "samtools-coverage_Bases-cnt.png:md5,8790b6226f16810deceb82c6834b21be",
+ "samtools-coverage_Bases-log.png:md5,7bdd54947c3ab74d06b9fc11cc35cb51",
+ "samtools-coverage_Coverage-cnt.png:md5,cdff6829f5d017e67668e6b77b8648fd",
+ "samtools-coverage_Coverage-log.png:md5,13441e809c66563bf7284ebe4038f368",
+ "samtools-coverage_MQ-cnt.png:md5,59265e8998386d8a6521296508b4f4e6",
+ "samtools-coverage_MQ-log.png:md5,0282c8f2fb311eb3830f6d33a8e0d2ef",
+ "samtools-coverage_Mean_depth-cnt.png:md5,7f0aa59d888da55c8b7e5ca00011b2fc",
+ "samtools-coverage_Mean_depth-log.png:md5,ab01268969d553decb36658ca785dac0",
+ "samtools-coverage_Reads-cnt.png:md5,f77fe84d95f5bebd12aa764ab377b6e7",
+ "samtools-coverage_Reads-log.png:md5,34d3ebbc83f073531328d633466cfcd9",
+ "samtools-flagstat-pct-table.png:md5,30a84ce2464168d8dedf65b47725e2e1",
+ "samtools-flagstat-table.png:md5,a828ba0e94ebd04d2ac50ecc43b007fd",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png:md5,91267791bafff119d985db6b24f813dc",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png:md5,d1c9fd2633128ed5af7113cedeba91d8",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png:md5,eb81f43f6c5778f957ce85137758235e",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png:md5,b1b15467c4b7e34b2a724c2fe9daefa8",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png:md5,64927987623ac1715e607470f6bf055a",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png:md5,09773cf98a65a96710a4fac9e2600ed9",
+ "samtools-stats-dp.png:md5,fe29585e232244237558512103d78fdc",
+ "samtools_alignment_plot-cnt.png:md5,e5523404a7622df41efaf24fb98ef4c5",
+ "samtools_alignment_plot-pct.png:md5,7945231e29b09915dee17a9fa620ef62"
+ ],
+ [
+ "biobambam2_deduplication-cnt.svg:md5,cfd25e0ac46d01b09f2196fc10487a97",
+ "biobambam2_deduplication-pct.svg:md5,c7ed58b8de114475f6ef551cc38246b6",
+ "fastp-insert-size-plot.svg:md5,463e2ebba19326fc07286ec96074439c",
+ "fastp-seq-content-gc-plot_Read_1_After_filtering.svg:md5,df2eff4d156ad7f187fa80e3340cbc9c",
+ "fastp-seq-content-gc-plot_Read_1_Before_filtering.svg:md5,de22f2c91d8abe074f24aada92336dae",
+ "fastp-seq-content-gc-plot_Read_2_After_filtering.svg:md5,c1119ba28aa972dcde0725e9ece9b452",
+ "fastp-seq-content-gc-plot_Read_2_Before_filtering.svg:md5,bf51d5e029164a62af8a97002bafaf91",
+ "fastp-seq-content-n-plot_Read_1_After_filtering.svg:md5,1cd1bb467239c3375c0670deb40910e4",
+ "fastp-seq-content-n-plot_Read_1_Before_filtering.svg:md5,58312bc31b5df1f981ddfaa464747d6a",
+ "fastp-seq-content-n-plot_Read_2_After_filtering.svg:md5,4b4d0bb5ee8e778e36d0b22b50e588ac",
+ "fastp-seq-content-n-plot_Read_2_Before_filtering.svg:md5,5a4346d963e57ef9dc93049473b299d4",
+ "fastp-seq-quality-plot_Read_1_After_filtering.svg:md5,8df1ad718fba86d1dc9100f686805969",
+ "fastp-seq-quality-plot_Read_1_Before_filtering.svg:md5,2ab2d86c525286641d2add385a2776b8",
+ "fastp-seq-quality-plot_Read_2_After_filtering.svg:md5,57fc98afa287a7efcb4cda584aaa1b03",
+ "fastp-seq-quality-plot_Read_2_Before_filtering.svg:md5,0255426c3f1eb52d8cc79e15becc30a2",
+ "fastp_filtered_reads_plot-cnt.svg:md5,e824977b86925e3f373258ecdd4043e3",
+ "fastp_filtered_reads_plot-pct.svg:md5,481a650cbb8337fd7324909c08782fbb",
+ "mosdepth-coverage-per-contig-single-cnt.svg:md5,54a9e9adab8aec8840883d8fbfd9a5d0",
+ "mosdepth-coverage-per-contig-single-pct.svg:md5,131d4cac8f19f0b95032c7233af5823e",
+ "mosdepth-cumcoverage-dist-id.svg:md5,179007d2d118f6a8e418e43aeaeb9c59",
+ "picard_alignment_readlength_plot.svg:md5,8251fdfdcf8d1cfcafa2c5e4274b5dd1",
+ "picard_alignment_summary_Aligned_Bases-cnt.svg:md5,fd201a6cf172881e6f665f3bf709e47d",
+ "picard_alignment_summary_Aligned_Bases-pct.svg:md5,000fee385374691cee56da73f6b1a6e3",
+ "picard_alignment_summary_Aligned_Reads-cnt.svg:md5,2dab47d583abe346da10f9cc7326afcf",
+ "picard_alignment_summary_Aligned_Reads-pct.svg:md5,d4a37067193df967815f12979b3af04c",
+ "picard_base_distribution_by_cycle__Adenine.svg:md5,218b08544c23a6efa4658d7f3752e104",
+ "picard_base_distribution_by_cycle__Cytosine.svg:md5,ab5e2bc1042bb94494552650de3f5572",
+ "picard_base_distribution_by_cycle__Guanine.svg:md5,b55b38dd248d4bb58d45727640b08bdb",
+ "picard_base_distribution_by_cycle__Thymine.svg:md5,3207e557593827437917773a6d7a3076",
+ "picard_base_distribution_by_cycle__Undetermined.svg:md5,ce646cb1a14cf74c5d07cd95ea3ea6fa",
+ "picard_quality_by_cycle.svg:md5,8d09b50d5323d7d08e78694e2b4f5783",
+ "picard_quality_score_distribution.svg:md5,252451413c9a1305642aeca9540fe95b",
+ "picard_wgs_metrics_bases.svg:md5,2433b911e40ebe4bf49fabfdd473f488",
+ "picard_wgs_metrics_histogram_Counts_Histogram.svg:md5,90789c6587b1924a203de3ea67051e1d",
+ "picard_wgs_metrics_histogram_Percentage_Drop-Off.svg:md5,57bf92e2f97b6698a78761e9133d696d",
+ "samtools-coverage-table.svg:md5,dc9a03bbcdc8e6c85ecdcbc473c284e5",
+ "samtools-coverage_BQ-cnt.svg:md5,3bf9dd0ff0afb7dac4e82c3cc0debee6",
+ "samtools-coverage_BQ-log.svg:md5,3503b4d291a6bc5f13321ea35367173c",
+ "samtools-coverage_Bases-cnt.svg:md5,1da43ab7b821f0950bc5fcd9d0ef4de6",
+ "samtools-coverage_Bases-log.svg:md5,5d6d1e30f71dc901bc854891f8a86c8b",
+ "samtools-coverage_Coverage-cnt.svg:md5,bd068ea990b4a9ab34f8ed7906ab4df7",
+ "samtools-coverage_Coverage-log.svg:md5,a84dbdcc47032a0802f0f4303fff79e5",
+ "samtools-coverage_MQ-cnt.svg:md5,a34d1b3ef3307b7f239f345c4c46417c",
+ "samtools-coverage_MQ-log.svg:md5,f0d92ed6064fe3857222add705200ebf",
+ "samtools-coverage_Mean_depth-cnt.svg:md5,beb5c52e77b588aff06211996b5c9c58",
+ "samtools-coverage_Mean_depth-log.svg:md5,bf0fe9b38385d501bfdc0eb8ae32dc0c",
+ "samtools-coverage_Reads-cnt.svg:md5,a0f29b2d300f8d441cf0444dfed15d2c",
+ "samtools-coverage_Reads-log.svg:md5,2b286ec78f439cc836c27b894355a649",
+ "samtools-flagstat-pct-table.svg:md5,a861423dc06a2c4343ac008da572cae6",
+ "samtools-flagstat-table.svg:md5,7e3929334dc02949b8a8624cee0b74f7",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg:md5,6beb4644520950ba9d88aa2fc76f97ca",
+ "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg:md5,bdd312d3b7078cf983b55365b073c8da",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg:md5,cacd164220e021555bfab9d77d1604d6",
+ "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg:md5,a0afc475e749152c8a1f68348e126468",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg:md5,70ee0003a9ad53ef889f8b1e6ab29fbd",
+ "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg:md5,10677c752400f74cb2d80b448a7ecb6e",
+ "samtools-stats-dp.svg:md5,7a82a092680d0a2f74bc6bd7ddaff3ff",
+ "samtools_alignment_plot-cnt.svg:md5,57bf2b3f8ae396795a58e41c6a13eaad",
+ "samtools_alignment_plot-pct.svg:md5,11319f379dfc395ae27e63e58911a7dc"
+ ]
+ ]
+ ],
+ "multiqc_library_report": [
+ "multiqc_library_test.html:md5,39501e6d3e661aa5268cc7bc3013842e"
+ ],
+ "multiqc_main_data": [
+ [
+ [
+ "llms-full.txt:md5,5c2ab84efb61df9527a502df6d502f6b",
+ "multiqc.log:md5,b1c042eb498add3a6e44b5b1198a11a3",
+ "multiqc.parquet:md5,38b4675edf61dc905c4e5001dc8dcde1",
+ "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f",
+ "multiqc_data.json:md5,3372e515c6d7aee673f28f47c22507ba",
+ "multiqc_software_versions.txt:md5,b957e99d3c8616d8a0326be3f6114ced",
+ "multiqc_sources.txt:md5,d2a044df39ce3c6abe5cdc2d67473490"
+ ]
+ ]
+ ],
+ "multiqc_main_plots": [
+ [
+
+ ]
],
- "multiqc_report": [
+ "multiqc_main_report": [
[
- "multiqc_report.html"
+ "multiqc.html:md5,62160777bc781484c4e2434e8c6009ff"
]
],
"panelcoverage": [
@@ -1284,6 +2016,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"sample_type": "DNA",
"samplename": "sample1",
@@ -1314,6 +2047,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"sample_type": "DNA",
"samplename": "sample1",
@@ -1344,6 +2078,7 @@
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
"id": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"sample_type": "DNA",
"samplename": "sample1",
@@ -1360,6 +2095,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1385,6 +2121,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1410,6 +2147,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1435,6 +2173,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1460,6 +2199,7 @@
"groupSize": 1,
"groupTarget": {
"samplename": "sample1",
+ "library": "test",
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
@@ -1502,6 +2242,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:10:35.894317"
+ "timestamp": "2025-12-04T19:51:58.967318"
}
}
\ No newline at end of file
From 00bcfcb60ff3166b586bba44a2556eb8314db370 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 20:01:04 +0100
Subject: [PATCH 089/228] fix linting
---
modules.json | 130 +++++++--------------------
modules/nf-core/multiqc/multiqc.diff | 8 +-
2 files changed, 36 insertions(+), 102 deletions(-)
diff --git a/modules.json b/modules.json
index de8e0ac9..cbebbe1e 100644
--- a/modules.json
+++ b/modules.json
@@ -8,207 +8,151 @@
"bcl2fastq": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": [
- "bcl_demultiplex"
- ]
+ "installed_by": ["bcl_demultiplex"]
},
"bclconvert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "bcl_demultiplex",
- "modules"
- ],
+ "installed_by": ["bcl_demultiplex", "modules"],
"patch": "modules/nf-core/bclconvert/bclconvert.diff"
},
"biobambam/bamsormadup": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff"
},
"bowtie2/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "fastq_align_dna",
- "modules"
- ],
+ "installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/bowtie2/align/bowtie2-align.diff"
},
"bwa/mem": {
"branch": "master",
"git_sha": "1c46359c837ef768b004519f535c30378e8289fc",
- "installed_by": [
- "fastq_align_dna"
- ],
+ "installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwa/mem/bwa-mem.diff"
},
"bwamem2/mem": {
"branch": "master",
"git_sha": "d86336f3e7ae0d5f76c67b0859409769cfeb2af2",
- "installed_by": [
- "fastq_align_dna"
- ],
+ "installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff"
},
"dragmap/align": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": [
- "fastq_align_dna"
- ],
+ "installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
"fastp": {
"branch": "master",
"git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"md5sum": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"mosdepth": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/mosdepth/mosdepth.diff"
},
"multiqc": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/multiqc/multiqc.diff"
},
"picard/collecthsmetrics": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff"
},
"picard/collectmultiplemetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff"
},
"picard/collectwgsmetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
"samtools/cat": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/cat/samtools-cat.diff"
},
"samtools/convert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/convert/samtools-convert.diff"
},
"samtools/coverage": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
"samtools/flagstat": {
"branch": "master",
"git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"samtools/idxstats": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"samtools/import": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"samtools/sormadup": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sormadup/samtools-sormadup.diff"
},
"samtools/sort": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sort/samtools-sort.diff"
},
"samtools/stats": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/stats/samtools-stats.diff"
},
"snapaligner/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "fastq_align_dna",
- "modules"
- ],
+ "installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/snapaligner/align/snapaligner-align.diff"
},
"star/align": {
"branch": "master",
"git_sha": "ce9e10540a1555145ddd1ddd8b15f7443cbe1449",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/star/align/star-align.diff"
},
"strobealign": {
"branch": "master",
"git_sha": "d5cc72b63c4e1565cb66e83f0577b04c0bb54d5c",
- "installed_by": [
- "fastq_align_dna",
- "modules"
- ],
+ "installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/strobealign/strobealign.diff"
}
}
@@ -218,40 +162,30 @@
"bcl_demultiplex": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"fastq_align_dna": {
"branch": "master",
"git_sha": "070ddae7fb59384d3d85bf69eb9a1d71ab33ada9",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"utils_nextflow_pipeline": {
"branch": "master",
"git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"utils_nfcore_pipeline": {
"branch": "master",
"git_sha": "df4d1c8cdee98a1bbbed8fc51e82296568e0f9c1",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
}
}
}
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/nf-core/multiqc/multiqc.diff b/modules/nf-core/multiqc/multiqc.diff
index 36396fa5..73a5eb45 100644
--- a/modules/nf-core/multiqc/multiqc.diff
+++ b/modules/nf-core/multiqc/multiqc.diff
@@ -1,4 +1,6 @@
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
@@ -27,10 +29,8 @@ Changes in 'multiqc/main.nf':
when:
task.ext.when == null || task.ext.when
-'modules/nf-core/multiqc/environment.yml' is unchanged
-'modules/nf-core/multiqc/meta.yml' is unchanged
-'modules/nf-core/multiqc/tests/custom_prefix.config' is unchanged
-'modules/nf-core/multiqc/tests/main.nf.test' is unchanged
'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
************************************************************
From e917d7fdc21c479de687536920146f7660804426 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 20:43:05 +0100
Subject: [PATCH 090/228] fix more tests
---
tests/workflows/preprocessing.nf.test | 27 +-
tests/workflows/preprocessing.nf.test.snap | 690 +--------------------
2 files changed, 36 insertions(+), 681 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index 2f1c5e4c..54a187ec 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -58,9 +58,12 @@ nextflow_workflow {
assert workflow.success
assert snapshot(
sanitizeOutput(workflow.out, unstableKeys:[
- "multiqc_report",
- "multiqc_plots",
- "multiqc_data",
+ "multiqc_main_report",
+ "multiqc_main_data",
+ "multiqc_main_plots",
+ "multiqc_library_report",
+ "multiqc_library_data",
+ "multiqc_library_plots",
"md5sums",
"fastp_html",
"crams",
@@ -124,9 +127,12 @@ nextflow_workflow {
assert workflow.success
assert snapshot(
sanitizeOutput(workflow.out, unstableKeys:[
- "multiqc_report",
- "multiqc_plots",
- "multiqc_data",
+ "multiqc_main_report",
+ "multiqc_main_data",
+ "multiqc_main_plots",
+ "multiqc_library_report",
+ "multiqc_library_data",
+ "multiqc_library_plots",
"md5sums",
"fastp_html",
"crams",
@@ -193,9 +199,12 @@ nextflow_workflow {
assert workflow.success
assert snapshot(
sanitizeOutput(workflow.out, unstableKeys:[
- "multiqc_report",
- "multiqc_plots",
- "multiqc_data",
+ "multiqc_main_report",
+ "multiqc_main_data",
+ "multiqc_main_plots",
+ "multiqc_library_report",
+ "multiqc_library_data",
+ "multiqc_library_plots",
"md5sums",
"fastp_html",
"crams",
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 961504d8..4a0b52f8 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -388,275 +388,17 @@
],
"multiqc_library_data": [
- [
- "biobambam2_deduplication.txt:md5,992b5decb6d017254ee9b02fbe076d81",
- "fastp-insert-size-plot.txt:md5,66fec5f01198da8ecd97410ec1727021",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,23420affa90c1523becba23c09653a92",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,27bb3440b4edeab8a9dc2ec1077cfc0e",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,e49276ebe93bb8294ca51e6a0916e703",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,f7bf2354433b3514893f0fe18e7f7877",
- "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,6c20997febd11ea6c80fe13a1761898b",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,a1d1cdbb1a1fb48b6d6bdf1f2192b2b7",
- "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,e1d8dcf05d785f863cfb17c96c1f58a4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,30bfcca763531e4ee1638031d5359e48",
- "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,2b0a42468f68992639ac8eacbf533134",
- "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,4e6fea487fecc2ee55db1518ff30a0b5",
- "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,72a6d8295748db4de13d6dc1d1eb83dc",
- "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,3b1c7675660e838e75d1d5c62c0f3a61",
- "fastp_filtered_reads_plot.txt:md5,9e506f1c8dbad71540697d11af4ba6df",
- "llms-full.txt:md5,a9dd5cb0ccb6d732ac915af862770693",
- "mosdepth-coverage-per-contig-single.txt:md5,e5dd72804ecbe8429179eaae01118d39",
- "mosdepth-cumcoverage-dist-id.txt:md5,49f3ec6d8639c9b0f794e4bf96bd11c4",
- "mosdepth_cov_dist.txt:md5,704ae312ab6109b1724e3fac0dc740ed",
- "mosdepth_cumcov_dist.txt:md5,704ae312ab6109b1724e3fac0dc740ed",
- "mosdepth_perchrom.txt:md5,e5dd72804ecbe8429179eaae01118d39",
- "multiqc.log:md5,0bf142cd568af28e39f166591e28b550",
- "multiqc.parquet:md5,c66e2b2f6ba202acf3cda2ebbd7b2a06",
- "multiqc_biobambam2_dups.txt:md5,31c942ce8964d0941cb79f8c9de8aa04",
- "multiqc_citations.txt:md5,294fadee817c59c64f1b985ac204b224",
- "multiqc_data.json:md5,0c06c19b2156369fab669049b6e37eb5",
- "multiqc_fastp.txt:md5,f917618024634bb24850390c8f4836e7",
- "multiqc_general_stats.txt:md5,439ff0539fa18ba86b79e990c42dff75",
- "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3f32124a666ad5fa6dda93759cf450f0",
- "multiqc_picard_HsMetrics.txt:md5,a5ccd0c64f6e2944a559280aaabce595",
- "multiqc_picard_baseContent.txt:md5,deba2098af2de348792a37b405eab78c",
- "multiqc_picard_quality_by_cycle.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
- "multiqc_picard_quality_score_distribution.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
- "multiqc_samtools_coverage.txt:md5,2b8ac198265a850d581d453eacb402cd",
- "multiqc_samtools_flagstat.txt:md5,5ce133683245100011b77cd676471de1",
- "multiqc_samtools_idxstats.txt:md5,7e542f20dd27d352b5d2be33e1920220",
- "multiqc_samtools_stats.txt:md5,1dd571a033605b1224ebac95deceee0b",
- "multiqc_sources.txt:md5,26011ccef291bca153e14a43437b4bbc",
- "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
- "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
- "picard_MeanQualityByCycle_histogram_1.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
- "picard_QualityScoreDistribution_histogram.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
- "picard_alignment_readlength_plot.txt:md5,891edbc18f01189de8c5bf52320ee6c7",
- "picard_alignment_summary_Aligned_Bases.txt:md5,7d13622d8d4083fe2a4be5bf92ea77e6",
- "picard_alignment_summary_Aligned_Reads.txt:md5,ed831c3df4e4465d9c6fb52ce731ee71",
- "picard_base_distribution_by_cycle__Adenine.txt:md5,989b9c396dfa032d8ca02f57b7cc6e7d",
- "picard_base_distribution_by_cycle__Cytosine.txt:md5,dc7b79f9ab4bc66db25b509e423abf2b",
- "picard_base_distribution_by_cycle__Guanine.txt:md5,1f2a16426851c0e434558d437ac482e3",
- "picard_base_distribution_by_cycle__Thymine.txt:md5,cbc90b7275fa29bf09d4be71fc443df1",
- "picard_base_distribution_by_cycle__Undetermined.txt:md5,e0a643aff9cf4b0d277c4da6c798c6dc",
- "picard_hsmetrics_table.txt:md5,a170b91563f01fc311048a9f1983ac87",
- "picard_percentage_target_bases.txt:md5,f29ba29d0df56128046793ff26ca5950",
- "picard_quality_by_cycle.txt:md5,f89d83da6f5a7fa00511a8959c2bd3c2",
- "picard_quality_score_distribution.txt:md5,9d72562e154dba19a69180e2875ae8e9",
- "samtools-coverage-table.txt:md5,0f9fe2b460eb659d5ce23deba4ee62d8",
- "samtools-coverage_BQ.txt:md5,68b97b7434bd35c71d3d14de478ba1b9",
- "samtools-coverage_Bases.txt:md5,f8fcf650945e7b347409d678fae3b006",
- "samtools-coverage_Coverage.txt:md5,bc62f359fced9778f869022dd4ab6647",
- "samtools-coverage_MQ.txt:md5,5f9ece387a8e160cedbb02874c46000b",
- "samtools-coverage_Mean_depth.txt:md5,4d5f58688b4c653b617c709717475c25",
- "samtools-coverage_Reads.txt:md5,3667b340251346e538e6f078adcec945",
- "samtools-flagstat-pct-table.txt:md5,8b0e71fcfbb55f6e8b0e6949fb146e0c",
- "samtools-flagstat-table.txt:md5,6203dc05b5eaee4f529300986aebbb3c",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e8f2b29a779d322cd56b00f4958ef841",
- "samtools-stats-dp.txt:md5,07153313edc4f7a3754e9821c85ca0cf",
- "samtools_alignment_plot.txt:md5,d60abeeecbb005aff19c12f19a726057"
- ]
+ "multiqc_library_test_data"
],
"multiqc_library_plots": [
- [
- [
- "biobambam2_deduplication-cnt.pdf:md5,8dcf3c25c3a6d362a312683b0cc52254",
- "biobambam2_deduplication-pct.pdf:md5,f38a15e73459aefdbf92f53a602eecab",
- "fastp-insert-size-plot.pdf:md5,761cc56448ee9500fadf80330b6e6c18",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.pdf:md5,e4ba12f4f0c3961dfe7343a420210f74",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf:md5,cbf4e5d5cd4bccc836ef8a4b00789608",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.pdf:md5,5c452cc418222a26b85bf2779ccc0e5f",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf:md5,148e583db6040c29d07ae06ade0aae37",
- "fastp-seq-content-n-plot_Read_1_After_filtering.pdf:md5,fdda12e04eceaabad0260e7694ca1a47",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.pdf:md5,f2d6ba7286870d31dbcdfdc501fa0fe4",
- "fastp-seq-content-n-plot_Read_2_After_filtering.pdf:md5,7fc668801cd69b020c5f0dcb7ab780f4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.pdf:md5,9c21674378164f3bd7010aedaf9f9c62",
- "fastp-seq-quality-plot_Read_1_After_filtering.pdf:md5,8d69018e6c7babd707ed91a30a2f4373",
- "fastp-seq-quality-plot_Read_1_Before_filtering.pdf:md5,1c14e7b644546b647e1525b0035d7095",
- "fastp-seq-quality-plot_Read_2_After_filtering.pdf:md5,d30a990dc6d11a33b3a0bd385b7e2765",
- "fastp-seq-quality-plot_Read_2_Before_filtering.pdf:md5,569074e2210e477a45c1196d967e0e03",
- "fastp_filtered_reads_plot-cnt.pdf:md5,1572b3a72a231623c8ae927b4cb7a0ae",
- "fastp_filtered_reads_plot-pct.pdf:md5,d3a4c1a1372f7b914ae6dac6b0b117aa",
- "mosdepth-coverage-per-contig-single-cnt.pdf:md5,b532e220dbd44f1b5bccae17f3a423da",
- "mosdepth-coverage-per-contig-single-pct.pdf:md5,eb539598e0da9e9c0f16033ff345594b",
- "mosdepth-cumcoverage-dist-id.pdf:md5,017ca25a754de8ad1e59bb8e5f9384a9",
- "picard_alignment_readlength_plot.pdf:md5,0f360805d8f8d8aeacf3aaae1dc6eb06",
- "picard_alignment_summary_Aligned_Bases-cnt.pdf:md5,e0e630f9c98be95f6b26b895721925ca",
- "picard_alignment_summary_Aligned_Bases-pct.pdf:md5,0afa444f1854208d7252dfd45c06a000",
- "picard_alignment_summary_Aligned_Reads-cnt.pdf:md5,0419bd8fcd699e40575e7c1619937b3e",
- "picard_alignment_summary_Aligned_Reads-pct.pdf:md5,aa9bb7e84867a2bd953756a95bc0f311",
- "picard_base_distribution_by_cycle__Adenine.pdf:md5,e5a1c8fd676d7267bf0e16baff152f96",
- "picard_base_distribution_by_cycle__Cytosine.pdf:md5,8093c223e5fc64be9db36341ee801a6a",
- "picard_base_distribution_by_cycle__Guanine.pdf:md5,82d32c26160589945f4c395c98220cb4",
- "picard_base_distribution_by_cycle__Thymine.pdf:md5,1c1ed09619d30f34ce0ddc9464d26706",
- "picard_base_distribution_by_cycle__Undetermined.pdf:md5,785db14b8f88f7b5675a991172a3ea2a",
- "picard_hsmetrics_table.pdf:md5,fc9411cf48ebd47c0c261f919849dd46",
- "picard_percentage_target_bases.pdf:md5,3752afa592927e547bf0c03e1d1006eb",
- "picard_quality_by_cycle.pdf:md5,673292cc4b18e8cca83522991b81a996",
- "picard_quality_score_distribution.pdf:md5,88f913aed3ae94590bf10d11a2b59a09",
- "samtools-coverage-table.pdf:md5,26da9fd5643611f77ae7d511d9b92a04",
- "samtools-coverage_BQ-cnt.pdf:md5,d2602d8ee5faee419b10283104b12e46",
- "samtools-coverage_BQ-log.pdf:md5,04983f8664bf34583140efef4594c91d",
- "samtools-coverage_Bases-cnt.pdf:md5,e7d204151b84a425c030605c40e5ac98",
- "samtools-coverage_Bases-log.pdf:md5,eb3195e76bc390a13bd786ce17994208",
- "samtools-coverage_Coverage-cnt.pdf:md5,4cd335d85e8071f4d6b34c07da7e58b3",
- "samtools-coverage_Coverage-log.pdf:md5,1a6d4126fd6390139db86ac9c59c10b8",
- "samtools-coverage_MQ-cnt.pdf:md5,19b1ec40e0a622c79429cd2e5db6a2ab",
- "samtools-coverage_MQ-log.pdf:md5,6bd0213a8e9437ea972d060a45dd32e0",
- "samtools-coverage_Mean_depth-cnt.pdf:md5,2e6766ac06b6d61b1eec6e5a4a8e773e",
- "samtools-coverage_Mean_depth-log.pdf:md5,a89995d4c79a6119465fb4899129ef73",
- "samtools-coverage_Reads-cnt.pdf:md5,f3ed81fba0bd8fdf860db5d4541fb66c",
- "samtools-coverage_Reads-log.pdf:md5,9aae76e8a17ae18bc7e1ea222736b4ff",
- "samtools-flagstat-pct-table.pdf:md5,e6debd913a8442f56cc22c714021e0a7",
- "samtools-flagstat-table.pdf:md5,28f63086a0ac9b57da1f0911b7f8940d",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf:md5,ae4ddcc627dada8d861a8c15e49d97f1",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf:md5,543a323fa0cede66f19ad512222954f4",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf:md5,3e874efbf35563c0e52fd47611822494",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf:md5,c18b4695893cde28c41de39fb16dbcee",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf:md5,d4b9c1b844d0cf4e29d112dc755682b4",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf:md5,f3bef9d1890b8a69acb9c52e07ce7ea3",
- "samtools-stats-dp.pdf:md5,9872a7fcbd9e6047c6b3c9aca5a36ced",
- "samtools_alignment_plot-cnt.pdf:md5,288be15b7710eadf32e6ba47511fe140",
- "samtools_alignment_plot-pct.pdf:md5,6e4103b696b62faaa47989881f202dbe"
- ],
- [
- "biobambam2_deduplication-cnt.png:md5,5707c3cf44cff88666c3c7b4970ab021",
- "biobambam2_deduplication-pct.png:md5,b2a0fece791ff0532a426f3faeecf3f4",
- "fastp-insert-size-plot.png:md5,40a7c7edc7062c92d088e8974dd1fbe9",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.png:md5,ff993de7c7a0b2f4dd17aaf509c8209b",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.png:md5,124351c45a1bd7d611fd3ba89510018b",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.png:md5,058842506a3200770c46a4a70b64ce48",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.png:md5,985bf206443edf1417e2a0f9354abe3c",
- "fastp-seq-content-n-plot_Read_1_After_filtering.png:md5,7855b3938c2b48578b2e1ca3486783de",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.png:md5,b9276b3bd8f2c57a51d12f76273fc322",
- "fastp-seq-content-n-plot_Read_2_After_filtering.png:md5,45684fe478e5d2912848c032c3bc8ee4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.png:md5,97606f1910cdbb47f68d5b7ac9f9bf4b",
- "fastp-seq-quality-plot_Read_1_After_filtering.png:md5,44fe9279b3f2279c19d2ce541b9c6c19",
- "fastp-seq-quality-plot_Read_1_Before_filtering.png:md5,93c06663d6ed02d11f4e5eab97d48917",
- "fastp-seq-quality-plot_Read_2_After_filtering.png:md5,99219cc1b64c80e6ac8cf653add1990c",
- "fastp-seq-quality-plot_Read_2_Before_filtering.png:md5,5d655406be9a2ff9a68ec461f51cfcc5",
- "fastp_filtered_reads_plot-cnt.png:md5,75911dd91d24adfaae185ebcf0a8455a",
- "fastp_filtered_reads_plot-pct.png:md5,4b3c0fd7f90c7c83b50c557d4aa3b6a5",
- "mosdepth-coverage-per-contig-single-cnt.png:md5,ff9cec471c8a882b3ad608312b950332",
- "mosdepth-coverage-per-contig-single-pct.png:md5,8f17612654e4217dd673c2788b473e7c",
- "mosdepth-cumcoverage-dist-id.png:md5,64f3a8071bca0d22a72c72090b2eb638",
- "picard_alignment_readlength_plot.png:md5,7c5708c6ed659731111242666746905e",
- "picard_alignment_summary_Aligned_Bases-cnt.png:md5,ccd4cdf7a4b1f3f2a39adf2e0c700ed4",
- "picard_alignment_summary_Aligned_Bases-pct.png:md5,de5771f0fc6d2feaf7ea1bef7b4f57ed",
- "picard_alignment_summary_Aligned_Reads-cnt.png:md5,fa8f7e289fd84f0dfb877758b926c421",
- "picard_alignment_summary_Aligned_Reads-pct.png:md5,18be469adf5d34e7296aa9e0feb10274",
- "picard_base_distribution_by_cycle__Adenine.png:md5,b59076e9793e4a403228c477f99c6cf8",
- "picard_base_distribution_by_cycle__Cytosine.png:md5,7c42741dd1ee386af449d29e21a8389d",
- "picard_base_distribution_by_cycle__Guanine.png:md5,27a487a8587c180f08d3afb58e71fb17",
- "picard_base_distribution_by_cycle__Thymine.png:md5,f99b137a9975db372a29c0400652eca4",
- "picard_base_distribution_by_cycle__Undetermined.png:md5,e7428923e6530f7bd00ca05bf2b0dabe",
- "picard_hsmetrics_table.png:md5,70c4f98f3056ebd1a5d49f4f91ab3001",
- "picard_percentage_target_bases.png:md5,1e70e6c776d49296f3f8debc3b893851",
- "picard_quality_by_cycle.png:md5,23c7dc421bf1a8b9c61e7abdea1b96e9",
- "picard_quality_score_distribution.png:md5,f129878e0583e69cac53ec51cac62f4e",
- "samtools-coverage-table.png:md5,ffc0a23dcfe8a1b44e7c585898a412ba",
- "samtools-coverage_BQ-cnt.png:md5,42a7bfacd302c7924d59701a585957f8",
- "samtools-coverage_BQ-log.png:md5,67d6d4c8072743a32dfa30dd22edd5fe",
- "samtools-coverage_Bases-cnt.png:md5,8790b6226f16810deceb82c6834b21be",
- "samtools-coverage_Bases-log.png:md5,7bdd54947c3ab74d06b9fc11cc35cb51",
- "samtools-coverage_Coverage-cnt.png:md5,cdff6829f5d017e67668e6b77b8648fd",
- "samtools-coverage_Coverage-log.png:md5,13441e809c66563bf7284ebe4038f368",
- "samtools-coverage_MQ-cnt.png:md5,59265e8998386d8a6521296508b4f4e6",
- "samtools-coverage_MQ-log.png:md5,0282c8f2fb311eb3830f6d33a8e0d2ef",
- "samtools-coverage_Mean_depth-cnt.png:md5,7f0aa59d888da55c8b7e5ca00011b2fc",
- "samtools-coverage_Mean_depth-log.png:md5,ab01268969d553decb36658ca785dac0",
- "samtools-coverage_Reads-cnt.png:md5,f77fe84d95f5bebd12aa764ab377b6e7",
- "samtools-coverage_Reads-log.png:md5,34d3ebbc83f073531328d633466cfcd9",
- "samtools-flagstat-pct-table.png:md5,30a84ce2464168d8dedf65b47725e2e1",
- "samtools-flagstat-table.png:md5,a828ba0e94ebd04d2ac50ecc43b007fd",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png:md5,91267791bafff119d985db6b24f813dc",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png:md5,d1c9fd2633128ed5af7113cedeba91d8",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png:md5,eb81f43f6c5778f957ce85137758235e",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png:md5,b1b15467c4b7e34b2a724c2fe9daefa8",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png:md5,64927987623ac1715e607470f6bf055a",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png:md5,09773cf98a65a96710a4fac9e2600ed9",
- "samtools-stats-dp.png:md5,fe29585e232244237558512103d78fdc",
- "samtools_alignment_plot-cnt.png:md5,e5523404a7622df41efaf24fb98ef4c5",
- "samtools_alignment_plot-pct.png:md5,7945231e29b09915dee17a9fa620ef62"
- ],
- [
- "biobambam2_deduplication-cnt.svg:md5,effd09d8ad9d34872090a0bae6f5e967",
- "biobambam2_deduplication-pct.svg:md5,e58bfa9f92464f78673fd1ad9e2450d0",
- "fastp-insert-size-plot.svg:md5,83bcd604041b4fa6053dcb0d33f21fed",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.svg:md5,03a57f9e891bb8aeac9a4979b0e7e513",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.svg:md5,fe77090c3ee62106e5cdd0d243744ced",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.svg:md5,fc70efca2a6feb2ebd02712323ab858f",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.svg:md5,a9aeaf418a4af53db36fa495652538b5",
- "fastp-seq-content-n-plot_Read_1_After_filtering.svg:md5,c45ccd2c9670cfc6a8fe7e7c411fa792",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.svg:md5,78d3817a16b013f647a23564878f1542",
- "fastp-seq-content-n-plot_Read_2_After_filtering.svg:md5,f33d2472e82e715f9d33b6781d4671b2",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.svg:md5,e7bdb138105422f2eca236628ac1c024",
- "fastp-seq-quality-plot_Read_1_After_filtering.svg:md5,353db00f7a3f20c0c07838236e88a5ed",
- "fastp-seq-quality-plot_Read_1_Before_filtering.svg:md5,69cef5512260a6af8955d9785966a806",
- "fastp-seq-quality-plot_Read_2_After_filtering.svg:md5,46f0ee90d934323da913b14927888a75",
- "fastp-seq-quality-plot_Read_2_Before_filtering.svg:md5,bf833093bbc86d88a297d48ac7ad64ad",
- "fastp_filtered_reads_plot-cnt.svg:md5,89f162c2fe82f89d487564c26b007003",
- "fastp_filtered_reads_plot-pct.svg:md5,74c611b014426ffc6990fd278dd5077d",
- "mosdepth-coverage-per-contig-single-cnt.svg:md5,4e8ee59993d08a72eb4545fb8378a8ba",
- "mosdepth-coverage-per-contig-single-pct.svg:md5,6c79f39035c6cb6db7f135eefb155a0e",
- "mosdepth-cumcoverage-dist-id.svg:md5,587529190643bec79f4c4da65e68fdae",
- "picard_alignment_readlength_plot.svg:md5,b0bf8f98c4bfd66b8848b5cf645812a6",
- "picard_alignment_summary_Aligned_Bases-cnt.svg:md5,1e4c349f358aa1375f00eeb19a638898",
- "picard_alignment_summary_Aligned_Bases-pct.svg:md5,1b2f81b0a0a23d54f62946a266d352b1",
- "picard_alignment_summary_Aligned_Reads-cnt.svg:md5,9ee533f876f4af410f0fdd3da6427d89",
- "picard_alignment_summary_Aligned_Reads-pct.svg:md5,713905bb8f964ccbf5d0b730447ae9a1",
- "picard_base_distribution_by_cycle__Adenine.svg:md5,1a8b1b45ba9b22e9c230adcfce962dd8",
- "picard_base_distribution_by_cycle__Cytosine.svg:md5,82a8225f9561a6296aa0b2bb801bf568",
- "picard_base_distribution_by_cycle__Guanine.svg:md5,a3bb637662550e5712909ebb90268b11",
- "picard_base_distribution_by_cycle__Thymine.svg:md5,316858766a810aa7bac94e9fa82f6a0e",
- "picard_base_distribution_by_cycle__Undetermined.svg:md5,f09460fa07c95a4b8d326c62eaeb7099",
- "picard_hsmetrics_table.svg:md5,2882442c46a78a971612f03b60cdc9a7",
- "picard_percentage_target_bases.svg:md5,bf71b0901b3f91350ea786c293500cd9",
- "picard_quality_by_cycle.svg:md5,83b907ec1941f942498b8c19ac15d335",
- "picard_quality_score_distribution.svg:md5,4b5a6ac776863aab6a0874a1788e838c",
- "samtools-coverage-table.svg:md5,1d344020db642dc8ed73ce65384eaed9",
- "samtools-coverage_BQ-cnt.svg:md5,e618e68a0e1d475030a5b86d05217ae6",
- "samtools-coverage_BQ-log.svg:md5,d7af1801f148ea9bda9c0d105afc8270",
- "samtools-coverage_Bases-cnt.svg:md5,af0bf231e9dfc5545686c9d0d7fc0bac",
- "samtools-coverage_Bases-log.svg:md5,d6070217bb54d7f966b21c8563571945",
- "samtools-coverage_Coverage-cnt.svg:md5,ffeb1e8ffd6318d30c9ffd72f8701eb8",
- "samtools-coverage_Coverage-log.svg:md5,81aafb2970773832ccc95a6a87c0db12",
- "samtools-coverage_MQ-cnt.svg:md5,9aaa9307dbe314b04e1e2f78dec852db",
- "samtools-coverage_MQ-log.svg:md5,e530d20e0b9ac5ea89a1d7e99e561da3",
- "samtools-coverage_Mean_depth-cnt.svg:md5,b3366c179f143419ef91bc2016e717d2",
- "samtools-coverage_Mean_depth-log.svg:md5,c13a4e5c2f1e78b77c5bed76598d3e6b",
- "samtools-coverage_Reads-cnt.svg:md5,153e7705058794c16bee02ce37daba50",
- "samtools-coverage_Reads-log.svg:md5,68f3871ec68b060e54380d353e1a0ded",
- "samtools-flagstat-pct-table.svg:md5,7a64df60de3c53a62ce1b9bc62d1e600",
- "samtools-flagstat-table.svg:md5,9d6e77d29691f652ed21a493866c226b",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg:md5,aee092dd5c492ae70e542cab5b11e8a6",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg:md5,a7ef56dd58e80e225252e5bd78c830f2",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg:md5,613dcab15c764fafd2151da9b3d5c55e",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg:md5,b1f82c95aed78d4e219f16cc7d3f41c3",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg:md5,4855e19f8503ef463a338bfcab7af3a5",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg:md5,b98efafd11eea5fd5292e247d4530821",
- "samtools-stats-dp.svg:md5,5c9cc7aeefc2a540d2b93bcdeda7aa39",
- "samtools_alignment_plot-cnt.svg:md5,0a2910be102b4c0ef6ac156a25a67005",
- "samtools_alignment_plot-pct.svg:md5,061886f9d0f5839eccb706a784f7eec7"
- ]
- ]
+ "multiqc_library_test_plots"
],
"multiqc_library_report": [
- "multiqc_library_test.html:md5,20fd67ac14ace887e5f5b76f02dc2b20"
+ "multiqc_library_test.html"
],
"multiqc_main_data": [
[
- [
- "llms-full.txt:md5,769bfe8a8b5b73ff5e31e480d5d129c9",
- "multiqc.log:md5,1ec335a68a9d72f823a7bf0bf42e028c",
- "multiqc.parquet:md5,73d600bb80fc3459bfba5edc970fc949",
- "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f",
- "multiqc_data.json:md5,8ad88f47321bfad770cdc2387d5fa6f9",
- "multiqc_software_versions.txt:md5,3e70a45b35aa87dab44c6b2b61033f14",
- "multiqc_sources.txt:md5,d2a044df39ce3c6abe5cdc2d67473490"
- ]
+ "multiqc_data"
]
],
"multiqc_main_plots": [
@@ -666,7 +408,7 @@
],
"multiqc_main_report": [
[
- "multiqc.html:md5,a05f843b1b044c86a850de70980b8af2"
+ "multiqc.html"
]
],
"panelcoverage": [
@@ -924,7 +666,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T19:48:21.07529"
+ "timestamp": "2025-12-04T20:36:50.85925"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -1099,151 +841,17 @@
],
"multiqc_library_data": [
- [
- "biobambam2_deduplication.txt:md5,992b5decb6d017254ee9b02fbe076d81",
- "fastp-insert-size-plot.txt:md5,66fec5f01198da8ecd97410ec1727021",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,23420affa90c1523becba23c09653a92",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,27bb3440b4edeab8a9dc2ec1077cfc0e",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,e49276ebe93bb8294ca51e6a0916e703",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,f7bf2354433b3514893f0fe18e7f7877",
- "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,6c20997febd11ea6c80fe13a1761898b",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,a1d1cdbb1a1fb48b6d6bdf1f2192b2b7",
- "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,e1d8dcf05d785f863cfb17c96c1f58a4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,30bfcca763531e4ee1638031d5359e48",
- "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,2b0a42468f68992639ac8eacbf533134",
- "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,4e6fea487fecc2ee55db1518ff30a0b5",
- "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,72a6d8295748db4de13d6dc1d1eb83dc",
- "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,3b1c7675660e838e75d1d5c62c0f3a61",
- "fastp_filtered_reads_plot.txt:md5,9e506f1c8dbad71540697d11af4ba6df",
- "llms-full.txt:md5,02c5ed19814d3afd16ea5fccc3516865",
- "multiqc.log:md5,faa526e1b74af6acf779e92caf5bd77a",
- "multiqc.parquet:md5,f991c38b80ea4795193224a782e94750",
- "multiqc_biobambam2_dups.txt:md5,31c942ce8964d0941cb79f8c9de8aa04",
- "multiqc_citations.txt:md5,b64ab308dbc3a2e58e15527370655958",
- "multiqc_data.json:md5,ea17bc7fc0063bb30073f9b5b3cc7bfb",
- "multiqc_fastp.txt:md5,f917618024634bb24850390c8f4836e7",
- "multiqc_general_stats.txt:md5,21152415bf3b3720dede9ada054ae5e1",
- "multiqc_samtools_flagstat.txt:md5,5ce133683245100011b77cd676471de1",
- "multiqc_samtools_idxstats.txt:md5,7e542f20dd27d352b5d2be33e1920220",
- "multiqc_samtools_stats.txt:md5,1dd571a033605b1224ebac95deceee0b",
- "multiqc_sources.txt:md5,08a7aa04a68650ae860f494ae1b5d4d2",
- "samtools-flagstat-pct-table.txt:md5,8b0e71fcfbb55f6e8b0e6949fb146e0c",
- "samtools-flagstat-table.txt:md5,6203dc05b5eaee4f529300986aebbb3c",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e8f2b29a779d322cd56b00f4958ef841",
- "samtools-stats-dp.txt:md5,07153313edc4f7a3754e9821c85ca0cf",
- "samtools_alignment_plot.txt:md5,d60abeeecbb005aff19c12f19a726057"
- ]
+ "multiqc_library_test_data"
],
"multiqc_library_plots": [
- [
- [
- "biobambam2_deduplication-cnt.pdf:md5,32dc6feb5cfb2a681e1baea64ed174d2",
- "biobambam2_deduplication-pct.pdf:md5,c210b96ff301c4699a981b7a747dd642",
- "fastp-insert-size-plot.pdf:md5,ac28b57e2270b846462ec69d469403de",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.pdf:md5,70fc95d50564a9e34ffedaab55c7e3a3",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf:md5,bfdadfab1ef45191268e8f19b5b56756",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.pdf:md5,be9b2f8bb0276f4da8cf20595035bb33",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf:md5,a00ca04dd4577aa4706975016bf82618",
- "fastp-seq-content-n-plot_Read_1_After_filtering.pdf:md5,9dd66bed0bb685993e1ac70aad2405a1",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.pdf:md5,95d07c4ea09e4ffb8473e84648eea599",
- "fastp-seq-content-n-plot_Read_2_After_filtering.pdf:md5,c9550470037ba6eec53118c5db3ed62a",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.pdf:md5,9a9dff340890cd43c6ee7a689112c49e",
- "fastp-seq-quality-plot_Read_1_After_filtering.pdf:md5,e3f499d8d0ccf8bf0df604e96f7be9cb",
- "fastp-seq-quality-plot_Read_1_Before_filtering.pdf:md5,c490b53f4a9cddbd3659256aedbeb4cd",
- "fastp-seq-quality-plot_Read_2_After_filtering.pdf:md5,31011ec67fc23ff867c60c45b9681396",
- "fastp-seq-quality-plot_Read_2_Before_filtering.pdf:md5,b75dad16330483e160720bd89649167d",
- "fastp_filtered_reads_plot-cnt.pdf:md5,e34eea79aa92a8f0a1cafa522d1204f3",
- "fastp_filtered_reads_plot-pct.pdf:md5,0f6b66deb6fbff878987ca29069cb016",
- "samtools-flagstat-pct-table.pdf:md5,781be091183f24877110f8d5be0ebbec",
- "samtools-flagstat-table.pdf:md5,bc1eff95cf645832e0dee6d86bcf503b",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf:md5,f392b8070efe5b7a4bd20993c0e66bfa",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf:md5,282ddb8116e7c774149d24015d2a56bd",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf:md5,824315ee6e029d3b42f37f02b9374734",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf:md5,cd587a5ace7868b2b24fdd16ad079e40",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf:md5,2be7c8ff5b10d0ee1fb6b01f4c2100ee",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf:md5,f2caf54746b77da42fe4200fc1f2eb96",
- "samtools-stats-dp.pdf:md5,8b63ef11ded4b2224f9d5f6d3f059c7a",
- "samtools_alignment_plot-cnt.pdf:md5,3d6c545941eec5834f4c991ecf0be42c",
- "samtools_alignment_plot-pct.pdf:md5,a62b1d31109315eacb4ce42c63ae0aef"
- ],
- [
- "biobambam2_deduplication-cnt.png:md5,5707c3cf44cff88666c3c7b4970ab021",
- "biobambam2_deduplication-pct.png:md5,b2a0fece791ff0532a426f3faeecf3f4",
- "fastp-insert-size-plot.png:md5,40a7c7edc7062c92d088e8974dd1fbe9",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.png:md5,ff993de7c7a0b2f4dd17aaf509c8209b",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.png:md5,124351c45a1bd7d611fd3ba89510018b",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.png:md5,058842506a3200770c46a4a70b64ce48",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.png:md5,985bf206443edf1417e2a0f9354abe3c",
- "fastp-seq-content-n-plot_Read_1_After_filtering.png:md5,7855b3938c2b48578b2e1ca3486783de",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.png:md5,b9276b3bd8f2c57a51d12f76273fc322",
- "fastp-seq-content-n-plot_Read_2_After_filtering.png:md5,45684fe478e5d2912848c032c3bc8ee4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.png:md5,97606f1910cdbb47f68d5b7ac9f9bf4b",
- "fastp-seq-quality-plot_Read_1_After_filtering.png:md5,44fe9279b3f2279c19d2ce541b9c6c19",
- "fastp-seq-quality-plot_Read_1_Before_filtering.png:md5,93c06663d6ed02d11f4e5eab97d48917",
- "fastp-seq-quality-plot_Read_2_After_filtering.png:md5,99219cc1b64c80e6ac8cf653add1990c",
- "fastp-seq-quality-plot_Read_2_Before_filtering.png:md5,5d655406be9a2ff9a68ec461f51cfcc5",
- "fastp_filtered_reads_plot-cnt.png:md5,75911dd91d24adfaae185ebcf0a8455a",
- "fastp_filtered_reads_plot-pct.png:md5,4b3c0fd7f90c7c83b50c557d4aa3b6a5",
- "samtools-flagstat-pct-table.png:md5,30a84ce2464168d8dedf65b47725e2e1",
- "samtools-flagstat-table.png:md5,a828ba0e94ebd04d2ac50ecc43b007fd",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png:md5,91267791bafff119d985db6b24f813dc",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png:md5,d1c9fd2633128ed5af7113cedeba91d8",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png:md5,eb81f43f6c5778f957ce85137758235e",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png:md5,b1b15467c4b7e34b2a724c2fe9daefa8",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png:md5,64927987623ac1715e607470f6bf055a",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png:md5,09773cf98a65a96710a4fac9e2600ed9",
- "samtools-stats-dp.png:md5,fe29585e232244237558512103d78fdc",
- "samtools_alignment_plot-cnt.png:md5,e5523404a7622df41efaf24fb98ef4c5",
- "samtools_alignment_plot-pct.png:md5,7945231e29b09915dee17a9fa620ef62"
- ],
- [
- "biobambam2_deduplication-cnt.svg:md5,9de3a4196707cc54a09ccab579551b45",
- "biobambam2_deduplication-pct.svg:md5,383483ee720a0b93282f11cef90d8412",
- "fastp-insert-size-plot.svg:md5,03e25e27d6f08e7eeef62edaac78705d",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.svg:md5,16db74211fea2dd026208e1ff8932921",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.svg:md5,ebce58ed6cef4ed79ea2ddd5d796e61e",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.svg:md5,2e6b93f07296d37a5fd08f493793ecf2",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.svg:md5,865602ee9731648cf55a8f6c6e3fcb20",
- "fastp-seq-content-n-plot_Read_1_After_filtering.svg:md5,c38f3a392319e4b9e2147a96b33e1186",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.svg:md5,b8416f1f456e3a189822f22c26e388ad",
- "fastp-seq-content-n-plot_Read_2_After_filtering.svg:md5,5c54a86a023e9ac204ece6eca7f4da3d",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.svg:md5,74ecf94d1bc8a2ea1315bad82e8da636",
- "fastp-seq-quality-plot_Read_1_After_filtering.svg:md5,2136357bde8a33774139d892f78f24f8",
- "fastp-seq-quality-plot_Read_1_Before_filtering.svg:md5,79c1c221969bdbcd7254eb8d9c6e15f2",
- "fastp-seq-quality-plot_Read_2_After_filtering.svg:md5,a55b84e706aa6aaa796e74f29bc32ec7",
- "fastp-seq-quality-plot_Read_2_Before_filtering.svg:md5,ddfc609e5a87d598e8abe9777130e8e6",
- "fastp_filtered_reads_plot-cnt.svg:md5,5fd1528dbf165823db88a7cf666ecb23",
- "fastp_filtered_reads_plot-pct.svg:md5,d8adcea8718c87a360b9d329e31cc64b",
- "samtools-flagstat-pct-table.svg:md5,3a27df4db014b18226c51f41868c8387",
- "samtools-flagstat-table.svg:md5,0c0bca9b4b56b6f1a7bac9b23be4bbe4",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg:md5,62227493b8c1c4abf2b9a56dee4aaee1",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg:md5,7e0a96a8947202ada7f3539f614aafbd",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg:md5,addf085c4878ef4c72bf2de0b1da73c5",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg:md5,198bee66f3e5232a1f389abf312f3230",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg:md5,1e1de4b4dfdaebb6c6c9cb6ecf78fc0d",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg:md5,2a42c274765d0a37f3eeef4b605ad55c",
- "samtools-stats-dp.svg:md5,c3d026b17b884a56736a66cdba55865b",
- "samtools_alignment_plot-cnt.svg:md5,55cf5b87a08d2fb1c4ee34099146a8b1",
- "samtools_alignment_plot-pct.svg:md5,123f6620c817c04bb14336aae67dcaac"
- ]
- ]
+ "multiqc_library_test_plots"
],
"multiqc_library_report": [
- "multiqc_library_test.html:md5,379d95b311027e666745448a9e27fe65"
+ "multiqc_library_test.html"
],
"multiqc_main_data": [
[
- [
- "llms-full.txt:md5,d188ca7a55d62d188c5c13608585d75c",
- "multiqc.log:md5,4832cad68754c77e2de90985272b0342",
- "multiqc.parquet:md5,182ff0904414468b20c9197f08ecf956",
- "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f",
- "multiqc_data.json:md5,a9e50ebc69822d508d72da06c16bf9ff",
- "multiqc_software_versions.txt:md5,4e94b4dd017aacfd34b89230176af1af",
- "multiqc_sources.txt:md5,d2a044df39ce3c6abe5cdc2d67473490"
- ]
+ "multiqc_data"
]
],
"multiqc_main_plots": [
@@ -1253,7 +861,7 @@
],
"multiqc_main_report": [
[
- "multiqc.html:md5,f3b0258eb0cd1c0ee4f206368de6b662"
+ "multiqc.html"
]
],
"panelcoverage": [
@@ -1401,7 +1009,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T19:54:04.990092"
+ "timestamp": "2025-12-04T20:42:53.576667"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1710,279 +1318,17 @@
],
"multiqc_library_data": [
- [
- "biobambam2_deduplication.txt:md5,992b5decb6d017254ee9b02fbe076d81",
- "fastp-insert-size-plot.txt:md5,66fec5f01198da8ecd97410ec1727021",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.txt:md5,23420affa90c1523becba23c09653a92",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.txt:md5,27bb3440b4edeab8a9dc2ec1077cfc0e",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.txt:md5,e49276ebe93bb8294ca51e6a0916e703",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.txt:md5,f7bf2354433b3514893f0fe18e7f7877",
- "fastp-seq-content-n-plot_Read_1_After_filtering.txt:md5,6c20997febd11ea6c80fe13a1761898b",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.txt:md5,a1d1cdbb1a1fb48b6d6bdf1f2192b2b7",
- "fastp-seq-content-n-plot_Read_2_After_filtering.txt:md5,e1d8dcf05d785f863cfb17c96c1f58a4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.txt:md5,30bfcca763531e4ee1638031d5359e48",
- "fastp-seq-quality-plot_Read_1_After_filtering.txt:md5,2b0a42468f68992639ac8eacbf533134",
- "fastp-seq-quality-plot_Read_1_Before_filtering.txt:md5,4e6fea487fecc2ee55db1518ff30a0b5",
- "fastp-seq-quality-plot_Read_2_After_filtering.txt:md5,72a6d8295748db4de13d6dc1d1eb83dc",
- "fastp-seq-quality-plot_Read_2_Before_filtering.txt:md5,3b1c7675660e838e75d1d5c62c0f3a61",
- "fastp_filtered_reads_plot.txt:md5,9e506f1c8dbad71540697d11af4ba6df",
- "llms-full.txt:md5,5f245d44b703b37991e2130e2247adb9",
- "mosdepth-coverage-per-contig-single.txt:md5,0c5d8872c18169b771168ca9fa7d40b2",
- "mosdepth-cumcoverage-dist-id.txt:md5,2592e72a312feb3363dece668fb2ea90",
- "mosdepth_cov_dist.txt:md5,f74eeba67b67d59def037884af206551",
- "mosdepth_cumcov_dist.txt:md5,f74eeba67b67d59def037884af206551",
- "mosdepth_perchrom.txt:md5,0c5d8872c18169b771168ca9fa7d40b2",
- "multiqc.log:md5,443bae2f4f1af6e82ae0c2623b5d5b26",
- "multiqc.parquet:md5,64c797120e6fe75c00726dd5a05b8613",
- "multiqc_biobambam2_dups.txt:md5,31c942ce8964d0941cb79f8c9de8aa04",
- "multiqc_citations.txt:md5,294fadee817c59c64f1b985ac204b224",
- "multiqc_data.json:md5,b021f17bc01883a1e6bb04642de162ba",
- "multiqc_fastp.txt:md5,f917618024634bb24850390c8f4836e7",
- "multiqc_general_stats.txt:md5,94493aa967cdafb4c5f78b8981b1a185",
- "multiqc_picard_AlignmentSummaryMetrics.txt:md5,3f32124a666ad5fa6dda93759cf450f0",
- "multiqc_picard_baseContent.txt:md5,deba2098af2de348792a37b405eab78c",
- "multiqc_picard_quality_by_cycle.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
- "multiqc_picard_quality_score_distribution.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
- "multiqc_picard_wgsmetrics.txt:md5,54691f0bafd26c22b3339ac5133e3e59",
- "multiqc_samtools_coverage.txt:md5,2b8ac198265a850d581d453eacb402cd",
- "multiqc_samtools_flagstat.txt:md5,5ce133683245100011b77cd676471de1",
- "multiqc_samtools_idxstats.txt:md5,7e542f20dd27d352b5d2be33e1920220",
- "multiqc_samtools_stats.txt:md5,1dd571a033605b1224ebac95deceee0b",
- "multiqc_sources.txt:md5,8bbd0fb5a901bd8e6da470a94357b8c7",
- "picard_MarkIlluminaAdapters_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
- "picard_MeanQualityByCycle_histogram.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
- "picard_MeanQualityByCycle_histogram_1.txt:md5,eca76b6ed78d34d66e1e185c7158868f",
- "picard_QualityScoreDistribution_histogram.txt:md5,6ec87b3288ada8fb9456a3cd1e801514",
- "picard_alignment_readlength_plot.txt:md5,891edbc18f01189de8c5bf52320ee6c7",
- "picard_alignment_summary_Aligned_Bases.txt:md5,7d13622d8d4083fe2a4be5bf92ea77e6",
- "picard_alignment_summary_Aligned_Reads.txt:md5,ed831c3df4e4465d9c6fb52ce731ee71",
- "picard_base_distribution_by_cycle__Adenine.txt:md5,989b9c396dfa032d8ca02f57b7cc6e7d",
- "picard_base_distribution_by_cycle__Cytosine.txt:md5,dc7b79f9ab4bc66db25b509e423abf2b",
- "picard_base_distribution_by_cycle__Guanine.txt:md5,1f2a16426851c0e434558d437ac482e3",
- "picard_base_distribution_by_cycle__Thymine.txt:md5,cbc90b7275fa29bf09d4be71fc443df1",
- "picard_base_distribution_by_cycle__Undetermined.txt:md5,e0a643aff9cf4b0d277c4da6c798c6dc",
- "picard_quality_by_cycle.txt:md5,f89d83da6f5a7fa00511a8959c2bd3c2",
- "picard_quality_score_distribution.txt:md5,9d72562e154dba19a69180e2875ae8e9",
- "picard_wgs_metrics_bases.txt:md5,5efebe4a352e7d44392faded88e10ec9",
- "picard_wgs_metrics_histogram_Counts_Histogram.txt:md5,681e302aec63d9b5fa8966ee8ee2373a",
- "picard_wgs_metrics_histogram_Percentage_Drop-Off.txt:md5,b37badd0338d073b2557c2492c472280",
- "samtools-coverage-table.txt:md5,0f9fe2b460eb659d5ce23deba4ee62d8",
- "samtools-coverage_BQ.txt:md5,68b97b7434bd35c71d3d14de478ba1b9",
- "samtools-coverage_Bases.txt:md5,f8fcf650945e7b347409d678fae3b006",
- "samtools-coverage_Coverage.txt:md5,bc62f359fced9778f869022dd4ab6647",
- "samtools-coverage_MQ.txt:md5,5f9ece387a8e160cedbb02874c46000b",
- "samtools-coverage_Mean_depth.txt:md5,4d5f58688b4c653b617c709717475c25",
- "samtools-coverage_Reads.txt:md5,3667b340251346e538e6f078adcec945",
- "samtools-flagstat-pct-table.txt:md5,8b0e71fcfbb55f6e8b0e6949fb146e0c",
- "samtools-flagstat-table.txt:md5,6203dc05b5eaee4f529300986aebbb3c",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts.txt:md5,ef2707df6eaa2bbc3989d17fd2fca0ce",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts.txt:md5,e8f2b29a779d322cd56b00f4958ef841",
- "samtools-stats-dp.txt:md5,07153313edc4f7a3754e9821c85ca0cf",
- "samtools_alignment_plot.txt:md5,d60abeeecbb005aff19c12f19a726057"
- ]
+ "multiqc_library_test_data"
],
"multiqc_library_plots": [
- [
- [
- "biobambam2_deduplication-cnt.pdf:md5,076943b1c590633eede4b60e8aa2434c",
- "biobambam2_deduplication-pct.pdf:md5,32d4caca75efe889205de73e3a0a4d97",
- "fastp-insert-size-plot.pdf:md5,f1023409a45dc9d8a0931659b0dc697d",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.pdf:md5,acbf529d4de4de437a3b71ef99d27698",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.pdf:md5,04621f82d0b3f8d97bf99b8d59b9988e",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.pdf:md5,9e23be66eacb942bd55f0459836bc111",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.pdf:md5,93b6b5bda685f45fb8c81747d0bccd7f",
- "fastp-seq-content-n-plot_Read_1_After_filtering.pdf:md5,a8c81efa4e85a5258b6c8930d5543c3d",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.pdf:md5,5fe572924ab5149f71f9c33a3aa2ef26",
- "fastp-seq-content-n-plot_Read_2_After_filtering.pdf:md5,6332b41f6963f9c9a0ef57e307cd636c",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.pdf:md5,25511034f06bb9c2d1ba499568285338",
- "fastp-seq-quality-plot_Read_1_After_filtering.pdf:md5,a5d9dbd669760bd35cabff4a957c72e0",
- "fastp-seq-quality-plot_Read_1_Before_filtering.pdf:md5,5d8a4222b4d43f2383759d6612faf1af",
- "fastp-seq-quality-plot_Read_2_After_filtering.pdf:md5,5eaaa59e813d0b5e86c833fa7030fa63",
- "fastp-seq-quality-plot_Read_2_Before_filtering.pdf:md5,8386c931c7b0ccd2f1fda5caa10d4612",
- "fastp_filtered_reads_plot-cnt.pdf:md5,07f08edd555887949d5732358c2adf56",
- "fastp_filtered_reads_plot-pct.pdf:md5,25516919ae1120b1e05ad36a296ae49e",
- "mosdepth-coverage-per-contig-single-cnt.pdf:md5,e31c2589a014aa1e1e6ac997119ad675",
- "mosdepth-coverage-per-contig-single-pct.pdf:md5,6435a5fe0f4b51d95e6a4b6acdd2f3d5",
- "mosdepth-cumcoverage-dist-id.pdf:md5,5d4af4029371ddba1ed19ed38f88c8f2",
- "picard_alignment_readlength_plot.pdf:md5,aa1f2ae479ecae2c3ab65cf265987258",
- "picard_alignment_summary_Aligned_Bases-cnt.pdf:md5,13b9efa703cde16499f597103e511ce9",
- "picard_alignment_summary_Aligned_Bases-pct.pdf:md5,5d53049cb3bfe99985fbf840095b960f",
- "picard_alignment_summary_Aligned_Reads-cnt.pdf:md5,89bd672088e27c155cf2d5a06f8b03b4",
- "picard_alignment_summary_Aligned_Reads-pct.pdf:md5,ea3c23c71d88ceba0cb38629cb5ed9bd",
- "picard_base_distribution_by_cycle__Adenine.pdf:md5,0305b7ed8db6442e58f6df0939aae0c2",
- "picard_base_distribution_by_cycle__Cytosine.pdf:md5,9fc115666272868eea3201b4ad329e6f",
- "picard_base_distribution_by_cycle__Guanine.pdf:md5,ea999ac900f032148ef8dc8311fbaf21",
- "picard_base_distribution_by_cycle__Thymine.pdf:md5,75fee9ea401481bd3a89d2e9dbc93b64",
- "picard_base_distribution_by_cycle__Undetermined.pdf:md5,5084d6ea1d038c2ad803ee61ea3d4beb",
- "picard_quality_by_cycle.pdf:md5,d46426fb7f451c50f7ea3900fbee909c",
- "picard_quality_score_distribution.pdf:md5,c4bace227e4be936499b16d8b791c4d2",
- "picard_wgs_metrics_bases.pdf:md5,8f385b4242b2839521d355da67d1601c",
- "picard_wgs_metrics_histogram_Counts_Histogram.pdf:md5,6d1fd94aab4dae5f06f9ab2fd18a2d14",
- "picard_wgs_metrics_histogram_Percentage_Drop-Off.pdf:md5,2973a0bd94ce539443fe3f144d60a57d",
- "samtools-coverage-table.pdf:md5,43f6c1db01c3d6e0cbeb598d8462c3bb",
- "samtools-coverage_BQ-cnt.pdf:md5,a0e08adcfcf5963508675e5f73f3ddc4",
- "samtools-coverage_BQ-log.pdf:md5,7cfa56d3008e2cbdd5ac1e6dd01a0da5",
- "samtools-coverage_Bases-cnt.pdf:md5,fe22f1634930da794d44c425cd3f9f75",
- "samtools-coverage_Bases-log.pdf:md5,a91260f7858bb59b05994a60c98b3d09",
- "samtools-coverage_Coverage-cnt.pdf:md5,28224f499e3b6101c2996159f75e52b6",
- "samtools-coverage_Coverage-log.pdf:md5,d24bb4c34863c442d9081d8c8c2ec92a",
- "samtools-coverage_MQ-cnt.pdf:md5,be7f66cb438e5857125034f8308f1a9d",
- "samtools-coverage_MQ-log.pdf:md5,0e67e1921c296fa19c8fc5b5b2808a4d",
- "samtools-coverage_Mean_depth-cnt.pdf:md5,2422e0664ff8f9e22a64e9f60c29dc01",
- "samtools-coverage_Mean_depth-log.pdf:md5,ccb6cda145cf3e19266e2de300bf5107",
- "samtools-coverage_Reads-cnt.pdf:md5,be0940f017942fd1ea7eb3b7472e78a9",
- "samtools-coverage_Reads-log.pdf:md5,147469231619cf8c5a1bcbfedd1536f9",
- "samtools-flagstat-pct-table.pdf:md5,4da35ccf697cab3209ff58e65ea22985",
- "samtools-flagstat-table.pdf:md5,ecf1cd68a33e2ffacd09bc26acd78c4f",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.pdf:md5,564d74b6292e8e644e80ebbc4f36cbe3",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.pdf:md5,008360a325c47b0eba81acf03f486221",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.pdf:md5,7e7b33224bcf3053b9f074c70d0e4342",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.pdf:md5,9f8fc3a6ff912245f7a3c5189bf9fcb1",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.pdf:md5,f4d9ff73a8b429e998c0fcbc143c468e",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.pdf:md5,eccf04a5b6928eaf4306b7404f2fd945",
- "samtools-stats-dp.pdf:md5,022199feb31379c5b5fb74ee031d8697",
- "samtools_alignment_plot-cnt.pdf:md5,889e13551f5a50465e5046bd101e8647",
- "samtools_alignment_plot-pct.pdf:md5,d66282dbb006fcae5f4c582f7892ca43"
- ],
- [
- "biobambam2_deduplication-cnt.png:md5,5707c3cf44cff88666c3c7b4970ab021",
- "biobambam2_deduplication-pct.png:md5,b2a0fece791ff0532a426f3faeecf3f4",
- "fastp-insert-size-plot.png:md5,40a7c7edc7062c92d088e8974dd1fbe9",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.png:md5,ff993de7c7a0b2f4dd17aaf509c8209b",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.png:md5,124351c45a1bd7d611fd3ba89510018b",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.png:md5,058842506a3200770c46a4a70b64ce48",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.png:md5,985bf206443edf1417e2a0f9354abe3c",
- "fastp-seq-content-n-plot_Read_1_After_filtering.png:md5,7855b3938c2b48578b2e1ca3486783de",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.png:md5,b9276b3bd8f2c57a51d12f76273fc322",
- "fastp-seq-content-n-plot_Read_2_After_filtering.png:md5,45684fe478e5d2912848c032c3bc8ee4",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.png:md5,97606f1910cdbb47f68d5b7ac9f9bf4b",
- "fastp-seq-quality-plot_Read_1_After_filtering.png:md5,44fe9279b3f2279c19d2ce541b9c6c19",
- "fastp-seq-quality-plot_Read_1_Before_filtering.png:md5,93c06663d6ed02d11f4e5eab97d48917",
- "fastp-seq-quality-plot_Read_2_After_filtering.png:md5,99219cc1b64c80e6ac8cf653add1990c",
- "fastp-seq-quality-plot_Read_2_Before_filtering.png:md5,5d655406be9a2ff9a68ec461f51cfcc5",
- "fastp_filtered_reads_plot-cnt.png:md5,75911dd91d24adfaae185ebcf0a8455a",
- "fastp_filtered_reads_plot-pct.png:md5,4b3c0fd7f90c7c83b50c557d4aa3b6a5",
- "mosdepth-coverage-per-contig-single-cnt.png:md5,4d6f6bf53791c7438153194cf5c28b58",
- "mosdepth-coverage-per-contig-single-pct.png:md5,8f17612654e4217dd673c2788b473e7c",
- "mosdepth-cumcoverage-dist-id.png:md5,9a1b83a02f39658f5896ed4b665f7327",
- "picard_alignment_readlength_plot.png:md5,7c5708c6ed659731111242666746905e",
- "picard_alignment_summary_Aligned_Bases-cnt.png:md5,ccd4cdf7a4b1f3f2a39adf2e0c700ed4",
- "picard_alignment_summary_Aligned_Bases-pct.png:md5,de5771f0fc6d2feaf7ea1bef7b4f57ed",
- "picard_alignment_summary_Aligned_Reads-cnt.png:md5,fa8f7e289fd84f0dfb877758b926c421",
- "picard_alignment_summary_Aligned_Reads-pct.png:md5,18be469adf5d34e7296aa9e0feb10274",
- "picard_base_distribution_by_cycle__Adenine.png:md5,b59076e9793e4a403228c477f99c6cf8",
- "picard_base_distribution_by_cycle__Cytosine.png:md5,7c42741dd1ee386af449d29e21a8389d",
- "picard_base_distribution_by_cycle__Guanine.png:md5,27a487a8587c180f08d3afb58e71fb17",
- "picard_base_distribution_by_cycle__Thymine.png:md5,f99b137a9975db372a29c0400652eca4",
- "picard_base_distribution_by_cycle__Undetermined.png:md5,e7428923e6530f7bd00ca05bf2b0dabe",
- "picard_quality_by_cycle.png:md5,23c7dc421bf1a8b9c61e7abdea1b96e9",
- "picard_quality_score_distribution.png:md5,f129878e0583e69cac53ec51cac62f4e",
- "picard_wgs_metrics_bases.png:md5,6ae01c3c3e7a7f6bac5dd44e0e29dd6a",
- "picard_wgs_metrics_histogram_Counts_Histogram.png:md5,cfd66c498f788418c650ec052c12c737",
- "picard_wgs_metrics_histogram_Percentage_Drop-Off.png:md5,2b050e4750a49c843e8fd8a1c2e01424",
- "samtools-coverage-table.png:md5,ffc0a23dcfe8a1b44e7c585898a412ba",
- "samtools-coverage_BQ-cnt.png:md5,42a7bfacd302c7924d59701a585957f8",
- "samtools-coverage_BQ-log.png:md5,67d6d4c8072743a32dfa30dd22edd5fe",
- "samtools-coverage_Bases-cnt.png:md5,8790b6226f16810deceb82c6834b21be",
- "samtools-coverage_Bases-log.png:md5,7bdd54947c3ab74d06b9fc11cc35cb51",
- "samtools-coverage_Coverage-cnt.png:md5,cdff6829f5d017e67668e6b77b8648fd",
- "samtools-coverage_Coverage-log.png:md5,13441e809c66563bf7284ebe4038f368",
- "samtools-coverage_MQ-cnt.png:md5,59265e8998386d8a6521296508b4f4e6",
- "samtools-coverage_MQ-log.png:md5,0282c8f2fb311eb3830f6d33a8e0d2ef",
- "samtools-coverage_Mean_depth-cnt.png:md5,7f0aa59d888da55c8b7e5ca00011b2fc",
- "samtools-coverage_Mean_depth-log.png:md5,ab01268969d553decb36658ca785dac0",
- "samtools-coverage_Reads-cnt.png:md5,f77fe84d95f5bebd12aa764ab377b6e7",
- "samtools-coverage_Reads-log.png:md5,34d3ebbc83f073531328d633466cfcd9",
- "samtools-flagstat-pct-table.png:md5,30a84ce2464168d8dedf65b47725e2e1",
- "samtools-flagstat-table.png:md5,a828ba0e94ebd04d2ac50ecc43b007fd",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.png:md5,91267791bafff119d985db6b24f813dc",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.png:md5,d1c9fd2633128ed5af7113cedeba91d8",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.png:md5,eb81f43f6c5778f957ce85137758235e",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.png:md5,b1b15467c4b7e34b2a724c2fe9daefa8",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.png:md5,64927987623ac1715e607470f6bf055a",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.png:md5,09773cf98a65a96710a4fac9e2600ed9",
- "samtools-stats-dp.png:md5,fe29585e232244237558512103d78fdc",
- "samtools_alignment_plot-cnt.png:md5,e5523404a7622df41efaf24fb98ef4c5",
- "samtools_alignment_plot-pct.png:md5,7945231e29b09915dee17a9fa620ef62"
- ],
- [
- "biobambam2_deduplication-cnt.svg:md5,cfd25e0ac46d01b09f2196fc10487a97",
- "biobambam2_deduplication-pct.svg:md5,c7ed58b8de114475f6ef551cc38246b6",
- "fastp-insert-size-plot.svg:md5,463e2ebba19326fc07286ec96074439c",
- "fastp-seq-content-gc-plot_Read_1_After_filtering.svg:md5,df2eff4d156ad7f187fa80e3340cbc9c",
- "fastp-seq-content-gc-plot_Read_1_Before_filtering.svg:md5,de22f2c91d8abe074f24aada92336dae",
- "fastp-seq-content-gc-plot_Read_2_After_filtering.svg:md5,c1119ba28aa972dcde0725e9ece9b452",
- "fastp-seq-content-gc-plot_Read_2_Before_filtering.svg:md5,bf51d5e029164a62af8a97002bafaf91",
- "fastp-seq-content-n-plot_Read_1_After_filtering.svg:md5,1cd1bb467239c3375c0670deb40910e4",
- "fastp-seq-content-n-plot_Read_1_Before_filtering.svg:md5,58312bc31b5df1f981ddfaa464747d6a",
- "fastp-seq-content-n-plot_Read_2_After_filtering.svg:md5,4b4d0bb5ee8e778e36d0b22b50e588ac",
- "fastp-seq-content-n-plot_Read_2_Before_filtering.svg:md5,5a4346d963e57ef9dc93049473b299d4",
- "fastp-seq-quality-plot_Read_1_After_filtering.svg:md5,8df1ad718fba86d1dc9100f686805969",
- "fastp-seq-quality-plot_Read_1_Before_filtering.svg:md5,2ab2d86c525286641d2add385a2776b8",
- "fastp-seq-quality-plot_Read_2_After_filtering.svg:md5,57fc98afa287a7efcb4cda584aaa1b03",
- "fastp-seq-quality-plot_Read_2_Before_filtering.svg:md5,0255426c3f1eb52d8cc79e15becc30a2",
- "fastp_filtered_reads_plot-cnt.svg:md5,e824977b86925e3f373258ecdd4043e3",
- "fastp_filtered_reads_plot-pct.svg:md5,481a650cbb8337fd7324909c08782fbb",
- "mosdepth-coverage-per-contig-single-cnt.svg:md5,54a9e9adab8aec8840883d8fbfd9a5d0",
- "mosdepth-coverage-per-contig-single-pct.svg:md5,131d4cac8f19f0b95032c7233af5823e",
- "mosdepth-cumcoverage-dist-id.svg:md5,179007d2d118f6a8e418e43aeaeb9c59",
- "picard_alignment_readlength_plot.svg:md5,8251fdfdcf8d1cfcafa2c5e4274b5dd1",
- "picard_alignment_summary_Aligned_Bases-cnt.svg:md5,fd201a6cf172881e6f665f3bf709e47d",
- "picard_alignment_summary_Aligned_Bases-pct.svg:md5,000fee385374691cee56da73f6b1a6e3",
- "picard_alignment_summary_Aligned_Reads-cnt.svg:md5,2dab47d583abe346da10f9cc7326afcf",
- "picard_alignment_summary_Aligned_Reads-pct.svg:md5,d4a37067193df967815f12979b3af04c",
- "picard_base_distribution_by_cycle__Adenine.svg:md5,218b08544c23a6efa4658d7f3752e104",
- "picard_base_distribution_by_cycle__Cytosine.svg:md5,ab5e2bc1042bb94494552650de3f5572",
- "picard_base_distribution_by_cycle__Guanine.svg:md5,b55b38dd248d4bb58d45727640b08bdb",
- "picard_base_distribution_by_cycle__Thymine.svg:md5,3207e557593827437917773a6d7a3076",
- "picard_base_distribution_by_cycle__Undetermined.svg:md5,ce646cb1a14cf74c5d07cd95ea3ea6fa",
- "picard_quality_by_cycle.svg:md5,8d09b50d5323d7d08e78694e2b4f5783",
- "picard_quality_score_distribution.svg:md5,252451413c9a1305642aeca9540fe95b",
- "picard_wgs_metrics_bases.svg:md5,2433b911e40ebe4bf49fabfdd473f488",
- "picard_wgs_metrics_histogram_Counts_Histogram.svg:md5,90789c6587b1924a203de3ea67051e1d",
- "picard_wgs_metrics_histogram_Percentage_Drop-Off.svg:md5,57bf92e2f97b6698a78761e9133d696d",
- "samtools-coverage-table.svg:md5,dc9a03bbcdc8e6c85ecdcbc473c284e5",
- "samtools-coverage_BQ-cnt.svg:md5,3bf9dd0ff0afb7dac4e82c3cc0debee6",
- "samtools-coverage_BQ-log.svg:md5,3503b4d291a6bc5f13321ea35367173c",
- "samtools-coverage_Bases-cnt.svg:md5,1da43ab7b821f0950bc5fcd9d0ef4de6",
- "samtools-coverage_Bases-log.svg:md5,5d6d1e30f71dc901bc854891f8a86c8b",
- "samtools-coverage_Coverage-cnt.svg:md5,bd068ea990b4a9ab34f8ed7906ab4df7",
- "samtools-coverage_Coverage-log.svg:md5,a84dbdcc47032a0802f0f4303fff79e5",
- "samtools-coverage_MQ-cnt.svg:md5,a34d1b3ef3307b7f239f345c4c46417c",
- "samtools-coverage_MQ-log.svg:md5,f0d92ed6064fe3857222add705200ebf",
- "samtools-coverage_Mean_depth-cnt.svg:md5,beb5c52e77b588aff06211996b5c9c58",
- "samtools-coverage_Mean_depth-log.svg:md5,bf0fe9b38385d501bfdc0eb8ae32dc0c",
- "samtools-coverage_Reads-cnt.svg:md5,a0f29b2d300f8d441cf0444dfed15d2c",
- "samtools-coverage_Reads-log.svg:md5,2b286ec78f439cc836c27b894355a649",
- "samtools-flagstat-pct-table.svg:md5,a861423dc06a2c4343ac008da572cae6",
- "samtools-flagstat-table.svg:md5,7e3929334dc02949b8a8624cee0b74f7",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-cnt.svg:md5,6beb4644520950ba9d88aa2fc76f97ca",
- "samtools-idxstats-mapped-reads-plot_Normalised_Counts-log.svg:md5,bdd312d3b7078cf983b55365b073c8da",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-cnt.svg:md5,cacd164220e021555bfab9d77d1604d6",
- "samtools-idxstats-mapped-reads-plot_Observed_over_Expected_Counts-log.svg:md5,a0afc475e749152c8a1f68348e126468",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-cnt.svg:md5,70ee0003a9ad53ef889f8b1e6ab29fbd",
- "samtools-idxstats-mapped-reads-plot_Raw_Counts-log.svg:md5,10677c752400f74cb2d80b448a7ecb6e",
- "samtools-stats-dp.svg:md5,7a82a092680d0a2f74bc6bd7ddaff3ff",
- "samtools_alignment_plot-cnt.svg:md5,57bf2b3f8ae396795a58e41c6a13eaad",
- "samtools_alignment_plot-pct.svg:md5,11319f379dfc395ae27e63e58911a7dc"
- ]
- ]
+ "multiqc_library_test_plots"
],
"multiqc_library_report": [
- "multiqc_library_test.html:md5,39501e6d3e661aa5268cc7bc3013842e"
+ "multiqc_library_test.html"
],
"multiqc_main_data": [
[
- [
- "llms-full.txt:md5,5c2ab84efb61df9527a502df6d502f6b",
- "multiqc.log:md5,b1c042eb498add3a6e44b5b1198a11a3",
- "multiqc.parquet:md5,38b4675edf61dc905c4e5001dc8dcde1",
- "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f",
- "multiqc_data.json:md5,3372e515c6d7aee673f28f47c22507ba",
- "multiqc_software_versions.txt:md5,b957e99d3c8616d8a0326be3f6114ced",
- "multiqc_sources.txt:md5,d2a044df39ce3c6abe5cdc2d67473490"
- ]
+ "multiqc_data"
]
],
"multiqc_main_plots": [
@@ -1992,7 +1338,7 @@
],
"multiqc_main_report": [
[
- "multiqc.html:md5,62160777bc781484c4e2434e8c6009ff"
+ "multiqc.html"
]
],
"panelcoverage": [
@@ -2242,6 +1588,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T19:51:58.967318"
+ "timestamp": "2025-12-04T20:39:54.655718"
}
}
\ No newline at end of file
From d0da19e7166bc78e875825aab9bd2c952e509a85 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 15:31:47 +0100
Subject: [PATCH 091/228] Update schema and test input with aligner: false
---
assets/schema_input.json | 4 ++--
assets/schema_sampleinfo.json | 4 ++--
nextflow_schema.json | 4 ++--
tests/inputs/fastq.yml | 18 ++++++++++++++++++
4 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/assets/schema_input.json b/assets/schema_input.json
index deb42ab7..1e576bb7 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -35,9 +35,9 @@
},
"aligner": {
"meta": ["aligner"],
- "type": "string",
+ "type": ["string", "boolean"],
"description": "Aligner to use to align sample to the reference genome",
- "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star"]
+ "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false]
},
"tag": {
"meta": ["tag"],
diff --git a/assets/schema_sampleinfo.json b/assets/schema_sampleinfo.json
index c5443971..daa63fc0 100644
--- a/assets/schema_sampleinfo.json
+++ b/assets/schema_sampleinfo.json
@@ -83,9 +83,9 @@
},
"aligner": {
"meta": ["aligner"],
- "type": "string",
+ "type": ["string", "boolean"],
"description": "Aligner to use to align sample to the reference genome",
- "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star"]
+ "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false]
}
}
},
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 1003fc1b..17c9bee5 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -52,10 +52,10 @@
"default": "",
"properties": {
"aligner": {
- "type": "string",
+ "type": ["string", "boolean"],
"default": "bowtie2",
"description": "Which aligner to use",
- "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star"]
+ "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false]
},
"markdup": {
"type": "string",
diff --git a/tests/inputs/fastq.yml b/tests/inputs/fastq.yml
index 20a5ec56..87c8daf3 100644
--- a/tests/inputs/fastq.yml
+++ b/tests/inputs/fastq.yml
@@ -5,6 +5,7 @@
library: test_library
organism: Homo sapiens
tag: WES
+ aligner: bwamem
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
@@ -12,5 +13,22 @@
library: test_library
organism: Homo sapiens
tag: WES
+ aligner: bwamem
+ 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
+- id: sample2_L001
+ samplename: fastq_paired_unaligned
+ library: test_unaligned
+ organism: Homo sapiens
+ tag: WES
+ aligner: false
+ 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: sample2_L002
+ samplename: fastq_paired_unaligned
+ library: test_unaligned
+ organism: Homo sapiens
+ tag: WES
+ aligner: false
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
From e390159ed389f9dbc6d1a95214ef989c5625e0f8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 19:25:18 +0100
Subject: [PATCH 092/228] convert untrimmed fastq -> ucram
---
workflows/preprocessing.nf | 65 +++++++++++++++++++-------------------
1 file changed, 33 insertions(+), 32 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index c737d2b1..a51b5b09 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -166,6 +166,11 @@ workflow PREPROCESSING {
if (aligner && !meta.aligner) {
meta = meta + ["aligner": aligner]
}
+
+ // If the aligner is set to `false`, redirect sample to unaligned flow by dropping the genome_data key
+ if (meta.aligner == false || meta.aligner == "false") {
+ meta = meta - meta.subMap('genome_data')
+ }
// set the ROI
// // Special case for coPGT samples
// // if there's no global ROI AND no sample speficic ROI
@@ -188,12 +193,26 @@ workflow PREPROCESSING {
.map { meta, fastq ->
return [meta - meta.subMap('fcid', 'lane'), fastq]
}
+ .branch { meta, _reads ->
+ supported: meta.genome_data instanceof Map && meta.genome_data.size() > 0
+ other: true
+ }
.set { ch_fastq_per_sample }
- ch_fastq_per_sample.dump(tag: "FASTQ per sample", pretty: true)
+ ch_fastq_per_sample.supported.dump(tag: "Supported FASTQ per sample", pretty: true)
+ ch_fastq_per_sample.other.dump(tag: "Other FASTQ per sample", pretty: true)
+/*
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+// STEP: FASTQ TO UNALIGNED CRAM CONVERSION
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+*/
- /*
+ FASTQ_TO_UCRAM(ch_fastq_per_sample.other)
+ ch_versions = ch_versions.mix(FASTQ_TO_UCRAM.out.versions)
+
+
+/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// FASTQ TRIMMING AND QC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -223,44 +242,26 @@ workflow PREPROCESSING {
reads,
]
}
- .branch { meta, _reads ->
- supported: meta.genome_data instanceof Map && meta.genome_data.size() > 0
- other: true
- }
.set { ch_trimmed_reads }
- ch_trimmed_reads.supported.dump(tag: "Supported trimmed reads per sample", pretty: true)
- ch_trimmed_reads.other.dump(tag: "Other trimmed reads per sample", pretty: true)
-
-
- /*
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// STEP: FASTQ TO UNALIGNED CRAM CONVERSION
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*/
-
- FASTQ_TO_UCRAM(ch_trimmed_reads.other)
- ch_versions = ch_versions.mix(FASTQ_TO_UCRAM.out.versions)
-
- /*
+ ch_trimmed_reads.dump(tag: "Supported trimmed reads per sample", pretty: true)
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: FASTQ TO ALIGNED CRAM CONVERSION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
- ch_trimmed_reads.supported
- .map { meta, reads ->
- return [
- meta,
- reads,
- meta.aligner,
- getGenomeAttribute(meta.genome_data, meta.aligner),
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "gtf"),
- ]
- }
- .set { ch_meta_reads_aligner_index_fasta_gtf }
+ ch_trimmed_reads.map { meta, reads ->
+ return [
+ meta,
+ reads,
+ meta.aligner,
+ getGenomeAttribute(meta.genome_data, meta.aligner),
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "gtf"),
+ ]
+ }
+ .set { ch_meta_reads_aligner_index_fasta_gtf }
FASTQ_TO_CRAM(
ch_meta_reads_aligner_index_fasta_gtf,
From 52c3f8a4207a0267c22ff0a8321f5301186ee554 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 19:59:16 +0100
Subject: [PATCH 093/228] Drop support for unaligned cram
---
CHANGELOG.md | 1 +
main.nf | 5 -
modules.json | 11 --
modules/nf-core/samtools/cat/environment.yml | 10 --
modules/nf-core/samtools/cat/main.nf | 50 ---------
modules/nf-core/samtools/cat/meta.yml | 64 -----------
.../nf-core/samtools/cat/samtools-cat.diff | 23 ----
.../nf-core/samtools/cat/tests/main.nf.test | 61 -----------
.../samtools/cat/tests/main.nf.test.snap | 70 ------------
.../nf-core/samtools/import/environment.yml | 10 --
modules/nf-core/samtools/import/main.nf | 59 ----------
modules/nf-core/samtools/import/meta.yml | 77 -------------
.../samtools/import/tests/main.nf.test | 83 --------------
.../samtools/import/tests/main.nf.test.snap | 103 ------------------
.../local/fastq_to_unaligned_cram/main.nf | 67 ------------
.../local/fastq_to_unaligned_cram/meta.yml | 0
.../fastq_to_unaligned_cram/main.nf.test | 36 ------
.../fastq_to_unaligned_cram/main.nf.test.snap | 30 -----
workflows/preprocessing.nf | 20 +---
19 files changed, 5 insertions(+), 775 deletions(-)
delete mode 100644 modules/nf-core/samtools/cat/environment.yml
delete mode 100644 modules/nf-core/samtools/cat/main.nf
delete mode 100644 modules/nf-core/samtools/cat/meta.yml
delete mode 100644 modules/nf-core/samtools/cat/samtools-cat.diff
delete mode 100644 modules/nf-core/samtools/cat/tests/main.nf.test
delete mode 100644 modules/nf-core/samtools/cat/tests/main.nf.test.snap
delete mode 100644 modules/nf-core/samtools/import/environment.yml
delete mode 100644 modules/nf-core/samtools/import/main.nf
delete mode 100644 modules/nf-core/samtools/import/meta.yml
delete mode 100644 modules/nf-core/samtools/import/tests/main.nf.test
delete mode 100644 modules/nf-core/samtools/import/tests/main.nf.test.snap
delete mode 100644 subworkflows/local/fastq_to_unaligned_cram/main.nf
delete mode 100644 subworkflows/local/fastq_to_unaligned_cram/meta.yml
delete mode 100644 tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test
delete mode 100644 tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 69949def..a93a96cc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Update the output handling to use the new workflow output definitions.
- Bump all modules to latest versions.
- The workflow now outputs data in a subdirectory per `library`, including a library specific MultiQC report
+- Drop support for unaligned cram outputs.
## v2.0.6
diff --git a/main.nf b/main.nf
index 87371efa..5cae5882 100644
--- a/main.nf
+++ b/main.nf
@@ -70,7 +70,6 @@ workflow {
demultiplex_logs = PREPROCESSING.out.demultiplex_logs.transpose(by:1)
fastp_json = PREPROCESSING.out.fastp_json
fastp_html = PREPROCESSING.out.fastp_html
- ucrams = PREPROCESSING.out.ucrams
crams = PREPROCESSING.out.crams
align_reports = PREPROCESSING.out.align_reports
sormadup_metrics = PREPROCESSING.out.sormadup_metrics
@@ -124,10 +123,6 @@ output {
def out_path = meta.library ? "${meta.library}/${meta.samplename}/${html.name}" as String : "${meta.samplename}/${html.name}"
html >> out_path
} }
- ucrams { path { meta, cram ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/${meta.samplename}.unaligned.cram" as String : "${meta.samplename}/${meta.samplename}.unaligned.cram"
- cram >> out_path
- } }
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"
diff --git a/modules.json b/modules.json
index cbebbe1e..fe836420 100644
--- a/modules.json
+++ b/modules.json
@@ -86,12 +86,6 @@
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
- "samtools/cat": {
- "branch": "master",
- "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"],
- "patch": "modules/nf-core/samtools/cat/samtools-cat.diff"
- },
"samtools/convert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
@@ -114,11 +108,6 @@
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
"installed_by": ["modules"]
},
- "samtools/import": {
- "branch": "master",
- "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"]
- },
"samtools/sormadup": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml
deleted file mode 100644
index 89e12a64..00000000
--- a/modules/nf-core/samtools/cat/environment.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-# 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/htslib
- - bioconda::htslib=1.22.1
- # renovate: datasource=conda depName=bioconda/samtools
- - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf
deleted file mode 100644
index d200e501..00000000
--- a/modules/nf-core/samtools/cat/main.nf
+++ /dev/null
@@ -1,50 +0,0 @@
-process SAMTOOLS_CAT {
- tag "$meta.id"
- label 'process_low'
-
- conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' :
- 'biocontainers/samtools:1.22.1--h96c455f_0' }"
-
- input:
- tuple val(meta), path(input_files, stageAs: "?/*")
-
- output:
- tuple val(meta), path("*.bam") , optional:true, emit: bam
- tuple val(meta), path("*.cram"), optional:true, emit: cram
- path "versions.yml" , emit: versions
-
-
- when:
- task.ext.when == null || task.ext.when
-
- script:
- def args = task.ext.args ?: ''
- prefix = task.ext.prefix ?: "${meta.id}"
- def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension()
- """
- samtools \\
- cat \\
- $args \\
- -o ${prefix}.${file_type} \\
- $input_files
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
- """
-
- stub:
- prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}"
- def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension()
- """
- touch ${prefix}.${file_type}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
- """
-}
diff --git a/modules/nf-core/samtools/cat/meta.yml b/modules/nf-core/samtools/cat/meta.yml
deleted file mode 100644
index a2ac0e21..00000000
--- a/modules/nf-core/samtools/cat/meta.yml
+++ /dev/null
@@ -1,64 +0,0 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json
-name: samtools_cat
-description: Concatenate BAM or CRAM file
-keywords:
- - merge
- - bam
- - sam
- - cram
-tools:
- - samtools:
- description: |
- SAMtools is a set of utilities for interacting with and post-processing
- short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li.
- These files are generated as output by short read aligners like BWA.
- homepage: http://www.htslib.org/
- documentation: http://www.htslib.org/doc/samtools.html
- doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
- identifier: biotools:samtools
-input:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - input_files:
- type: file
- description: BAM/CRAM files
- pattern: "*.{bam,cram}"
- ontologies: []
-output:
- bam:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - ${prefix}.bam:
- type: file
- description: Concatenated BAM file
- pattern: "*.{bam}"
- ontologies: []
- cram:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - ${prefix}.cram:
- type: file
- description: Concatenated CRAM file
- pattern: "*.{cram}"
- ontologies: []
- versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
-authors:
- - "@matthdsm"
-maintainers:
- - "@matthdsm"
diff --git a/modules/nf-core/samtools/cat/samtools-cat.diff b/modules/nf-core/samtools/cat/samtools-cat.diff
deleted file mode 100644
index 5b6918b7..00000000
--- a/modules/nf-core/samtools/cat/samtools-cat.diff
+++ /dev/null
@@ -1,23 +0,0 @@
-Changes in component 'nf-core/samtools/cat'
-'modules/nf-core/samtools/cat/environment.yml' is unchanged
-'modules/nf-core/samtools/cat/meta.yml' is unchanged
-Changes in 'samtools/cat/main.nf':
---- modules/nf-core/samtools/cat/main.nf
-+++ modules/nf-core/samtools/cat/main.nf
-@@ -11,9 +11,9 @@
- tuple val(meta), path(input_files, stageAs: "?/*")
-
- output:
-- tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam
-- tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram
-- path "versions.yml" , emit: versions
-+ tuple val(meta), path("*.bam") , optional:true, emit: bam
-+ tuple val(meta), path("*.cram"), optional:true, emit: cram
-+ path "versions.yml" , emit: versions
-
-
- when:
-
-'modules/nf-core/samtools/cat/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/samtools/cat/tests/main.nf.test' is unchanged
-************************************************************
diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test b/modules/nf-core/samtools/cat/tests/main.nf.test
deleted file mode 100644
index dad80b83..00000000
--- a/modules/nf-core/samtools/cat/tests/main.nf.test
+++ /dev/null
@@ -1,61 +0,0 @@
-nextflow_process {
-
- name "Test Process SAMTOOLS_CAT"
- script "../main.nf"
- process "SAMTOOLS_CAT"
-
- tag "modules"
- tag "modules_nfcore"
- tag "samtools"
- tag "samtools/cat"
-
- test("bams") {
-
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(file(process.out.bam[0][1]).name).match("bams_bam") },
- { assert snapshot(process.out.cram).match("bams_cram") },
- { assert snapshot(process.out.versions).match("bams_versions") }
- )
- }
- }
-
- test("bams_stub") {
-
- options "-stub"
-
- when {
- process {
- """
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
- [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.unaligned.bam', checkIfExists: true) ]
- ])
- """
- }
- }
-
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(file(process.out.bam[0][1]).name).match("bams_stub_bam") },
- { assert snapshot(process.out.cram).match("bams_stub_cram") },
- { assert snapshot(process.out.versions).match("bams_stub_versions") }
- )
- }
- }
-}
diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap
deleted file mode 100644
index 2143309a..00000000
--- a/modules/nf-core/samtools/cat/tests/main.nf.test.snap
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "bams_stub_cram": {
- "content": [
- [
-
- ]
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.04.3"
- },
- "timestamp": "2024-02-02T16:45:42.587418"
- },
- "bams_stub_versions": {
- "content": [
- [
- "versions.yml:md5,99695cce7873f354da5dd8660522cb4f"
- ]
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
- },
- "timestamp": "2025-09-10T13:02:09.79415"
- },
- "bams_bam": {
- "content": [
- "test.bam"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.04.3"
- },
- "timestamp": "2024-02-02T16:45:37.965199"
- },
- "bams_cram": {
- "content": [
- [
-
- ]
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.04.3"
- },
- "timestamp": "2024-02-02T16:45:37.96805"
- },
- "bams_stub_bam": {
- "content": [
- "test.bam"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.04.3"
- },
- "timestamp": "2024-02-02T16:45:42.583881"
- },
- "bams_versions": {
- "content": [
- [
- "versions.yml:md5,99695cce7873f354da5dd8660522cb4f"
- ]
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
- },
- "timestamp": "2025-09-10T13:02:05.668116"
- }
-}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/import/environment.yml b/modules/nf-core/samtools/import/environment.yml
deleted file mode 100644
index 89e12a64..00000000
--- a/modules/nf-core/samtools/import/environment.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-# 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/htslib
- - bioconda::htslib=1.22.1
- # renovate: datasource=conda depName=bioconda/samtools
- - bioconda::samtools=1.22.1
diff --git a/modules/nf-core/samtools/import/main.nf b/modules/nf-core/samtools/import/main.nf
deleted file mode 100644
index 0efbc75a..00000000
--- a/modules/nf-core/samtools/import/main.nf
+++ /dev/null
@@ -1,59 +0,0 @@
-process SAMTOOLS_IMPORT {
- tag "$meta.id"
- label 'process_single'
-
- conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0':
- 'biocontainers/samtools:1.22.1--h96c455f_0' }"
-
- input:
- tuple val(meta), path(reads)
-
- output:
- tuple val(meta), path("*.sam") , emit: sam, optional: true
- tuple val(meta), path("*.bam") , emit: bam, optional: true
- tuple val(meta), path("*.cram"), emit: cram, optional: true
- path "versions.yml" , emit: versions
-
- when:
- task.ext.when == null || task.ext.when
-
- script:
- def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
- def suffix = args.contains("--output-fmt sam") ? "sam" :
- args.contains("--output-fmt bam") ? "bam" :
- args.contains("--output-fmt cram") ? "cram" :
- "bam"
- def input = reads instanceof List && meta.single_end ? reads.join(" -0") : // multiple single-end files
- reads instanceof List && !meta.single_end ? "-1 ${reads[0]} -2 ${reads[1]}": // paired end file
- meta.single_end ? "-0 $reads" : // single single-end file
- !meta.single_end ? "-s $reads": // interleave paired-end file
- reads // if all else fails, just add the reads without flags
- """
- samtools \\
- import \\
- $input \\
- $args \\
- -@ $task.cpus \\
- -o ${prefix}.${suffix}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
- """
-
- stub:
- def prefix = task.ext.prefix ?: "${meta.id}"
-
- """
- touch ${prefix}.bam
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
- """
-}
diff --git a/modules/nf-core/samtools/import/meta.yml b/modules/nf-core/samtools/import/meta.yml
deleted file mode 100644
index 2b86ce79..00000000
--- a/modules/nf-core/samtools/import/meta.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json
-name: "samtools_import"
-description: converts FASTQ files to unmapped SAM/BAM/CRAM
-keywords:
- - import
- - fastq
- - bam
- - sam
- - cram
-tools:
- - samtools:
- description: |
- SAMtools is a set of utilities for interacting with and post-processing
- short DNA sequence read alignments in the SAM, BAM and CRAM formats, written by Heng Li.
- These files are generated as output by short read aligners like BWA.
- homepage: http://www.htslib.org/
- documentation: http://www.htslib.org/doc/samtools.html
- doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
- identifier: biotools:samtools
-input:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. `[ id:'test', single_end:false ]`
- - reads:
- type: file
- description: fastq data to be converted to SAM/BAM/CRAM
- pattern: "*.{fastq,fq,fastq.gz,fq.gz}"
- ontologies:
- - edam: http://edamontology.org/format_1930 # FASTQ
-output:
- sam:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. `[ id:'test', single_end:false ]`
- - "*.sam":
- type: file
- description: SAM file
- pattern: "*.sam"
- ontologies: []
- bam:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. `[ id:'test', single_end:false ]`
- - "*.bam":
- type: file
- description: Unaligned BAM file
- pattern: "*.bam"
- ontologies: []
- cram:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. `[ id:'test', single_end:false ]`
- - "*.cram":
- type: file
- description: Unaligned CRAM file
- pattern: "*.cram"
- ontologies: []
- versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
-authors:
- - "@matthdsm"
-maintainers:
- - "@matthdsm"
diff --git a/modules/nf-core/samtools/import/tests/main.nf.test b/modules/nf-core/samtools/import/tests/main.nf.test
deleted file mode 100644
index 9c7ce5d9..00000000
--- a/modules/nf-core/samtools/import/tests/main.nf.test
+++ /dev/null
@@ -1,83 +0,0 @@
-nextflow_process {
-
- name "Test Process SAMTOOLS_IMPORT"
- script "../main.nf"
- process "SAMTOOLS_IMPORT"
- tag "modules"
- tag "modules_nfcore"
- tag "samtools"
- tag "samtools/import"
-
- test("samtools_import_single ") {
-
- when {
- params {
- outdir = "$outputDir"
- }
- process {
- """
- input[0] = Channel.of([
- [ id:'test', single_end:true ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll(
- {assert process.success},
- {assert snapshot(process.out.bam.collect { it.collect { it instanceof Map ? it : file(it).name } }).match()}
- )
- }
- }
-
- test("samtools_import_paired ") {
-
- when {
- params {
- outdir = "$outputDir"
- }
- process {
- """
- input[0] = Channel.of([
- [ id:'test', single_end:false ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll(
- {assert process.success},
- {assert snapshot(process.out.bam.collect { it.collect { it instanceof Map ? it : file(it).name } }).match()}
- )
- }
- }
-
- test("samtools_import_interleaved") {
-
- when {
- params {
- outdir = "$outputDir"
- }
- process {
- """
- input[0] = Channel.of([
- [ id:'test', single_end:false ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true)
- ])
- """
- }
- }
-
- then {
- assertAll(
- {assert process.success},
- {assert snapshot(process.out.bam.collect { it.collect { it instanceof Map ? it : file(it).name } }).match()}
- )
- }
- }
-}
diff --git a/modules/nf-core/samtools/import/tests/main.nf.test.snap b/modules/nf-core/samtools/import/tests/main.nf.test.snap
deleted file mode 100644
index eb730a06..00000000
--- a/modules/nf-core/samtools/import/tests/main.nf.test.snap
+++ /dev/null
@@ -1,103 +0,0 @@
-{
- "samtools_import_single ": {
- "content": [
- [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.bam"
- ]
- ]
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
- },
- "timestamp": "2024-05-31T11:38:44.388259606"
- },
- "samtools_import_interleaved": {
- "content": [
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.bam"
- ]
- ]
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
- },
- "timestamp": "2024-05-31T11:38:56.393371331"
- },
- "samtools_import_paired ": {
- "content": [
- [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.bam"
- ]
- ]
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
- },
- "timestamp": "2024-05-31T11:38:50.437197406"
- },
- "samtools_import_interleaved ": {
- "content": [
- {
- "0": [
-
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.bam:md5,fad91b070f51c77d7abe22cd31243710"
- ]
- ],
- "2": [
-
- ],
- "3": [
- "versions.yml:md5,a529fc2aa6485db14986c95c53638b11"
- ],
- "bam": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.bam:md5,fad91b070f51c77d7abe22cd31243710"
- ]
- ],
- "cram": [
-
- ],
- "sam": [
-
- ],
- "versions": [
- "versions.yml:md5,a529fc2aa6485db14986c95c53638b11"
- ]
- }
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "24.04.2"
- },
- "timestamp": "2024-05-30T12:12:43.491200967"
- }
-}
\ No newline at end of file
diff --git a/subworkflows/local/fastq_to_unaligned_cram/main.nf b/subworkflows/local/fastq_to_unaligned_cram/main.nf
deleted file mode 100644
index f1137f26..00000000
--- a/subworkflows/local/fastq_to_unaligned_cram/main.nf
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env nextflow
-
-//
-// Take fastq; convert to ubam and compress
-
-// MODULES
-include { SAMTOOLS_CAT } from '../../../modules/nf-core/samtools/cat/main'
-include { SAMTOOLS_IMPORT } from "../../../modules/nf-core/samtools/import/main"
-
-workflow FASTQ_TO_UCRAM {
- take:
- ch_fastq // channel: [mandatory] [meta, [fastq, ...]]
-
- main:
-
- ch_versions = channel.empty()
-
- /*
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // STEP: FASTQ TO BAM CONVERSION
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
-
- ch_fastq.dump(tag: "FASTQ_TO_UCRAM: reads to convert", pretty: true)
-
- // SAMTOOLS_IMPORT([meta, fastq])
- SAMTOOLS_IMPORT(ch_fastq)
- ch_versions = ch_versions.mix(SAMTOOLS_IMPORT.out.versions.first())
-
- SAMTOOLS_IMPORT.out.cram
- .map { meta, files ->
- def gk = (meta.chunks as Integer ?: 1)
- return [
- groupKey(
- meta - meta.subMap('id', 'readgroup', 'chunks') + [id: meta.samplename ? meta.samplename + ".unaligned" : meta.id + ".unaligned"],
- gk,
- ),
- files,
- ]
- }
- .groupTuple(by: [0])
- .dump(tag: "FASTQ_TO_UCRAM: unaligned cram per replicate", pretty: true)
- .map { meta, files ->
- def gk = (meta.count as Integer ?: 1)
- return [
- groupKey(
- meta - meta.subMap('count'),
- gk,
- ),
- files,
- ]
- }
- .groupTuple(by: [0])
- .map { meta, files ->
- return [meta, files.flatten()]
- }
- .dump(tag: "FASTQ_TO_UCRAM: unaligned cram per sample", pretty: true)
- .set { ch_ubam_per_sample }
-
- // Merge bam files per sample
- SAMTOOLS_CAT(ch_ubam_per_sample)
- ch_versions = ch_versions.mix(SAMTOOLS_CAT.out.versions.first())
-
- emit:
- cram = SAMTOOLS_CAT.out.cram // [meta, cram]
- versions = ch_versions // versions
-}
diff --git a/subworkflows/local/fastq_to_unaligned_cram/meta.yml b/subworkflows/local/fastq_to_unaligned_cram/meta.yml
deleted file mode 100644
index e69de29b..00000000
diff --git a/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test b/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test
deleted file mode 100644
index b3a3b185..00000000
--- a/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test
+++ /dev/null
@@ -1,36 +0,0 @@
-nextflow_workflow {
-
- name "Test Workflow FASTQ_TO_UCRAM"
- script "subworkflows/local/fastq_to_unaligned_cram/main.nf"
- workflow "FASTQ_TO_UCRAM"
-
- tag "subworkflows"
- tag "subworkflows/local"
- tag "subworkflows/local/fastq_to_unaligned_cram"
-
- test("fastq to unaligned cram") {
-
- when {
- workflow {
- """
- input[0] = Channel.of([
- [ id:'test', samplename:'test', single_end:false ], // meta map
- [
- file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
- file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R2.fastq.gz", checkIfExists: true)
- ]
- ])
- """
- }
- }
-
- then {
- assert workflow.success
- assert snapshot(
- sanitizeOutput(workflow.out, unstableKeys:["cram"])
- ).match()
- }
-
- }
-
-}
diff --git a/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap
deleted file mode 100644
index 39fd0d73..00000000
--- a/tests/subworkflows/local/fastq_to_unaligned_cram/main.nf.test.snap
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "fastq to unaligned cram": {
- "content": [
- {
- "cram": [
- [
- {
- "groupSize": 1,
- "groupTarget": {
- "id": "test.unaligned",
- "samplename": "test",
- "single_end": false
- }
- },
- "test.unaligned.cram"
- ]
- ],
- "versions": [
- "versions.yml:md5,7d0123b33defe52fceb94bd95f802978",
- "versions.yml:md5,f253e859e7aa43e34481f5493c4e847b"
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-02T13:05:20.48603"
- }
-}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index a51b5b09..86297aa5 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -15,11 +15,10 @@ include { MULTIQC as MULTIQC_MAIN } from '../modules/nf-core/multiqc/main'
include { SAMTOOLS_COVERAGE } from '../modules/nf-core/samtools/coverage/main'
// Subworkflows
-include { BAM_QC } from '../subworkflows/local/bam_qc/main'
-include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
-include { COVERAGE } from '../subworkflows/local/coverage/main'
-include { FASTQ_TO_UCRAM } from '../subworkflows/local/fastq_to_unaligned_cram/main'
-include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
+include { BAM_QC } from '../subworkflows/local/bam_qc/main'
+include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
+include { COVERAGE } from '../subworkflows/local/coverage/main'
+include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
// Functions
include { paramsSummaryMap } from 'plugin/nf-schema'
@@ -202,16 +201,6 @@ workflow PREPROCESSING {
ch_fastq_per_sample.supported.dump(tag: "Supported FASTQ per sample", pretty: true)
ch_fastq_per_sample.other.dump(tag: "Other FASTQ per sample", pretty: true)
-/*
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// STEP: FASTQ TO UNALIGNED CRAM CONVERSION
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*/
-
- FASTQ_TO_UCRAM(ch_fastq_per_sample.other)
- ch_versions = ch_versions.mix(FASTQ_TO_UCRAM.out.versions)
-
-
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// FASTQ TRIMMING AND QC
@@ -502,7 +491,6 @@ workflow PREPROCESSING {
demultiplex_logs = BCL_DEMULTIPLEX.out.logs
fastp_json = FASTP.out.json
fastp_html = FASTP.out.html
- ucrams = FASTQ_TO_UCRAM.out.cram
crams = FASTQ_TO_CRAM.out.cram_crai
align_reports = FASTQ_TO_CRAM.out.align_reports
sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
From 46368d86548b792e72378051ed31d4801077139b Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 20:51:38 +0100
Subject: [PATCH 094/228] redirect fastq to output when aligner is unset
---
workflows/preprocessing.nf | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 86297aa5..07c8c439 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -161,10 +161,6 @@ workflow PREPROCESSING {
else {
meta = meta + ["genome_data": [:]]
}
- // set the aligner
- if (aligner && !meta.aligner) {
- meta = meta + ["aligner": aligner]
- }
// If the aligner is set to `false`, redirect sample to unaligned flow by dropping the genome_data key
if (meta.aligner == false || meta.aligner == "false") {
@@ -193,7 +189,7 @@ workflow PREPROCESSING {
return [meta - meta.subMap('fcid', 'lane'), fastq]
}
.branch { meta, _reads ->
- supported: meta.genome_data instanceof Map && meta.genome_data.size() > 0
+ supported: meta.genome_data instanceof Map && meta.genome_data.size() > 0 && meta.aligner
other: true
}
.set { ch_fastq_per_sample }
From 0a094c1ee41c616df326de5332f0dc3c885997fd Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 21:24:49 +0100
Subject: [PATCH 095/228] update workflow output
---
CHANGELOG.md | 1 +
main.nf | 5 +++++
workflows/preprocessing.nf | 5 +++--
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a93a96cc..a6414d52 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Bump all modules to latest versions.
- The workflow now outputs data in a subdirectory per `library`, including a library specific MultiQC report
- Drop support for unaligned cram outputs.
+- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
## v2.0.6
diff --git a/main.nf b/main.nf
index 5cae5882..c45b7344 100644
--- a/main.nf
+++ b/main.nf
@@ -68,6 +68,7 @@ workflow {
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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
fastp_json = PREPROCESSING.out.fastp_json
fastp_html = PREPROCESSING.out.fastp_html
crams = PREPROCESSING.out.crams
@@ -115,6 +116,10 @@ output {
def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
log >> out_path
} }
+ 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
+ } }
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
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 07c8c439..abb3a35b 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -205,8 +205,8 @@ workflow PREPROCESSING {
// MODULE: fastp
// Run QC, trimming and adapter removal
- // FASTP([meta, fastq], adapter_fasta, save_trimmed, save_merged)
- FASTP(ch_fastq_per_sample.map{ meta, fastq -> return [meta, fastq, []] }, false, false, false)
+ // FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
+ FASTP(ch_fastq_per_sample.supported.map{ meta, fastq -> return [meta, fastq, []] }, false, false, false)
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
ch_versions = ch_versions.mix(FASTP.out.versions.first())
@@ -485,6 +485,7 @@ workflow PREPROCESSING {
demultiplex_interop = BCL_DEMULTIPLEX.out.interop
demultiplex_reports = BCL_DEMULTIPLEX.out.reports
demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ demultiplex_fastq = ch_fastq_per_sample.other
fastp_json = FASTP.out.json
fastp_html = FASTP.out.html
crams = FASTQ_TO_CRAM.out.cram_crai
From ae7e971d4600cb9ca07e1bdc87736a25a8d20a6a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 21:36:58 +0100
Subject: [PATCH 096/228] update docs
---
README.md | 2 +-
docs/parameters.md | 2 +-
docs/usage.md | 44 ++++++++++++++++++++++----------------------
3 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/README.md b/README.md
index 5bbc40e9..50e68f21 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
[](https://www.nf-test.com)
[](https://www.nextflow.io/)
-[](https://github.com/nf-core/tools/releases/tag/3.4.1)
+[](https://github.com/nf-core/tools/releases/tag/3.5.1)
[](https://docs.conda.io/en/latest/)
[](https://www.docker.com/)
[](https://sylabs.io/docs/)
diff --git a/docs/parameters.md b/docs/parameters.md
index ba546b9b..f3b3df8e 100644
--- a/docs/parameters.md
+++ b/docs/parameters.md
@@ -17,7 +17,7 @@ Define where the pipeline should find input data and save output data.
| Parameter | Description | Type | Default | Required | Hidden |
| ------------------------ | ----------------------------------------------------------------------- | --------- | ----------- | -------- | ------ |
-| `aligner` | Which aligner to use | `string` | bowtie2 | True | |
+| `aligner` | Which aligner to use. Set to `false` to output fastq. | `string` | bowtie2 | True | |
| `markdup` | Which alignment postprocessor to use | `string` | bamsormadup | | |
| `run_coverage` | Run coverage analysis steps | `boolean` | True | | |
| `skip_trimming` | Skip adapter trimming | `boolean` | False | | |
diff --git a/docs/usage.md b/docs/usage.md
index fe0779ab..1f1d72d2 100644
--- a/docs/usage.md
+++ b/docs/usage.md
@@ -39,17 +39,17 @@ TREATMENT_REP3,TREATMENT_REP3,AEG588A6_S6_L004_R1_001.fastq.gz,,GRCh38,WES
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 R egions O f I nterest for coverage analysis | :x: |
-| `aligner` | The aligner to use for this sample. Can be one of these: bowtie2, bwamem, bwamem2, dragmap and snap | :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 R egions O f I nterest 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.
@@ -84,17 +84,17 @@ Sample1,test,Homo sapiens,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 and snap | :x: |
+| 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
From efb3cf564b1c19909713a5c839dbbd6fc6cfbadb Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 22:12:39 +0100
Subject: [PATCH 097/228] output only fastq from demultiplexer, `aligner` param
no longer mandatory
---
nextflow.config | 2 +-
nextflow_schema.json | 3 +--
tests/inputs/fastq.yml | 16 ---------------
tests/workflows/preprocessing.nf.test.snap | 24 +++++++++++-----------
workflows/preprocessing.nf | 15 +++++++++-----
5 files changed, 24 insertions(+), 36 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 6e2cfcae..fab6f6f3 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -18,7 +18,7 @@ params {
igenomes_ignore = false
// Analysis options
- aligner = 'bowtie2'
+ aligner = null
markdup = 'bamsormadup'
umi_aware = false
skip_trimming = false
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 17c9bee5..67767d53 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -115,8 +115,7 @@
"format": "directory-path",
"description": "Directory containing gene list bed files for granular coverage analysis"
}
- },
- "required": ["aligner"]
+ }
},
"institutional_config_options": {
"title": "Institutional config options",
diff --git a/tests/inputs/fastq.yml b/tests/inputs/fastq.yml
index 87c8daf3..52668235 100644
--- a/tests/inputs/fastq.yml
+++ b/tests/inputs/fastq.yml
@@ -16,19 +16,3 @@
aligner: bwamem
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
-- id: sample2_L001
- samplename: fastq_paired_unaligned
- library: test_unaligned
- organism: Homo sapiens
- tag: WES
- aligner: false
- 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: sample2_L002
- samplename: fastq_paired_unaligned
- library: test_unaligned
- organism: Homo sapiens
- tag: WES
- aligner: false
- 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.snap b/tests/workflows/preprocessing.nf.test.snap
index 4a0b52f8..89d55ce7 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -32,6 +32,9 @@
"sample1.cram",
"sample1.cram.crai"
]
+ ],
+ "demultiplex_fastq": [
+
],
"demultiplex_interop": [
@@ -642,9 +645,6 @@
},
"sample1.merged.metrics.txt:md5,ba50ddef3f0147526ed1f01a98c47ed6"
]
- ],
- "ucrams": [
-
],
"versions": [
"versions.yml:md5,02acae00818ba01a01e2bdb03b574343",
@@ -666,7 +666,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T20:36:50.85925"
+ "timestamp": "2025-12-04T22:06:58.57247"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -701,6 +701,9 @@
"sample1.cram",
"sample1.cram.crai"
]
+ ],
+ "demultiplex_fastq": [
+
],
"demultiplex_interop": [
@@ -989,9 +992,6 @@
},
"sample1.merged.metrics.txt:md5,ba50ddef3f0147526ed1f01a98c47ed6"
]
- ],
- "ucrams": [
-
],
"versions": [
"versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
@@ -1009,7 +1009,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T20:42:53.576667"
+ "timestamp": "2025-12-04T22:11:37.660609"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1043,6 +1043,9 @@
"sample1.cram",
"sample1.cram.crai"
]
+ ],
+ "demultiplex_fastq": [
+
],
"demultiplex_interop": [
@@ -1564,9 +1567,6 @@
},
"sample1.merged.metrics.txt:md5,ba50ddef3f0147526ed1f01a98c47ed6"
]
- ],
- "ucrams": [
-
],
"versions": [
"versions.yml:md5,1d2a9b13790c70a69a1f62facc9b3a6c",
@@ -1588,6 +1588,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T20:39:54.655718"
+ "timestamp": "2025-12-04T22:09:54.979336"
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index abb3a35b..29e8f295 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -107,6 +107,10 @@ workflow PREPROCESSING {
.map { meta, fq ->
return [meta, fq.flatten().unique()]
}
+ .branch { meta, _fastq ->
+ to_align: meta.aligner && meta.aligner != "false"
+ other: true
+ }
.set { ch_demultiplexed_fastq_with_sampleinfo }
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -139,7 +143,7 @@ workflow PREPROCESSING {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
ch_input_fastq
- .mix(ch_demultiplexed_fastq_with_sampleinfo)
+ .mix(ch_demultiplexed_fastq_with_sampleinfo.to_align)
.map { meta, reads ->
if (meta.organism && !meta.genome) {
if (meta.organism ==~ /(?i)Homo[\s_]sapiens/) {
@@ -162,10 +166,11 @@ workflow PREPROCESSING {
meta = meta + ["genome_data": [:]]
}
- // If the aligner is set to `false`, redirect sample to unaligned flow by dropping the genome_data key
- if (meta.aligner == false || meta.aligner == "false") {
- meta = meta - meta.subMap('genome_data')
+ // set the aligner
+ if (aligner && !meta.aligner) {
+ meta = meta + ["aligner": aligner]
}
+
// set the ROI
// // Special case for coPGT samples
// // if there's no global ROI AND no sample speficic ROI
@@ -485,7 +490,7 @@ workflow PREPROCESSING {
demultiplex_interop = BCL_DEMULTIPLEX.out.interop
demultiplex_reports = BCL_DEMULTIPLEX.out.reports
demultiplex_logs = BCL_DEMULTIPLEX.out.logs
- demultiplex_fastq = ch_fastq_per_sample.other
+ demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
fastp_json = FASTP.out.json
fastp_html = FASTP.out.html
crams = FASTQ_TO_CRAM.out.cram_crai
From 7a23490990145da8347d3cf7b03d5bdda97b7248 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 22:34:44 +0100
Subject: [PATCH 098/228] drop `params.aligner` in favour of per sample
`aligner` meta field
---
README.md | 8 +++----
assets/schema_input.json | 4 ++--
assets/schema_sampleinfo.json | 9 +++++++-
conf/profiles/WES.config | 1 -
conf/profiles/WGS.config | 1 -
conf/profiles/copgt.config | 1 -
conf/profiles/sWGS.config | 1 -
conf/test.config | 1 -
docs/parameters.md | 1 -
main.nf | 1 -
nextflow.config | 1 -
nextflow_schema.json | 6 -----
tests/default.nf.test | 2 --
tests/workflows/preprocessing.nf.test | 33 ++++++++++++---------------
workflows/preprocessing.nf | 6 -----
15 files changed, 29 insertions(+), 47 deletions(-)
diff --git a/README.md b/README.md
index 50e68f21..f867fbba 100644
--- a/README.md
+++ b/README.md
@@ -43,8 +43,8 @@ First, prepare a samplesheet with your input data that looks as follows:
`samplesheet.csv` for fastq inputs:
```csv
-id,samplename,organism,library,fastq_1,fastq_2
-sample1,sample1,Homo sapiens,Library_Name,reads1.fq.gz,reads2.fq.gz
+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:
@@ -57,8 +57,8 @@ flowcell_id,/path/to/illumina_samplesheet.csv,1,/path/to/sequencer_uploaddir,/pa
`sampleinfo.csv` for use with flowcell inputs:
```csv
-samplename,library,organism,tag
-fc_sample1,test,Homo sapiens,WES
+samplename,library,organism,tag,aligner
+fc_sample1,test,Homo sapiens,WES,bwamem
```
Now, you can run the pipeline using:
diff --git a/assets/schema_input.json b/assets/schema_input.json
index 1e576bb7..7eab645d 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -110,10 +110,10 @@
},
"anyOf": [
{
- "required": ["id", "samplename", "organism", "tag", "fastq_1", "fastq_2"]
+ "required": ["id", "samplename", "organism", "aligner", "tag", "fastq_1", "fastq_2"]
},
{
- "required": ["id", "samplename", "genome", "tag", "fastq_1", "fastq_2"]
+ "required": ["id", "samplename", "genome", "aligner", "tag", "fastq_1", "fastq_2"]
},
{
"required": ["id", "samplesheet", "sample_info", "flowcell"]
diff --git a/assets/schema_sampleinfo.json b/assets/schema_sampleinfo.json
index daa63fc0..bac6789d 100644
--- a/assets/schema_sampleinfo.json
+++ b/assets/schema_sampleinfo.json
@@ -89,5 +89,12 @@
}
}
},
- "required": ["samplename", "tag", "organism"]
+ "anyOf": [
+ {
+ "required": ["samplename", "organism", "aligner", "tag"]
+ },
+ {
+ "required": ["samplename", "genome", "aligner", "tag"]
+ }
+ ]
}
diff --git a/conf/profiles/WES.config b/conf/profiles/WES.config
index e7dd235b..2fd529a8 100644
--- a/conf/profiles/WES.config
+++ b/conf/profiles/WES.config
@@ -1,5 +1,4 @@
params {
- aligner = "snap"
run_coverage = true
disable_picard_metrics = false
roi = "${params.igenomes_base}/Hsapiens/GRCh38/regions/CMGG_WES_analysis_ROI_v7.bed"
diff --git a/conf/profiles/WGS.config b/conf/profiles/WGS.config
index 2e1f2c11..657f8ec7 100644
--- a/conf/profiles/WGS.config
+++ b/conf/profiles/WGS.config
@@ -1,5 +1,4 @@
params {
- aligner = "snap"
markdup = "samtools"
umi_aware = true
run_coverage = true
diff --git a/conf/profiles/copgt.config b/conf/profiles/copgt.config
index 21a5bb45..67fd693b 100644
--- a/conf/profiles/copgt.config
+++ b/conf/profiles/copgt.config
@@ -1,5 +1,4 @@
params {
- aligner = "snap"
run_coverage = true
disable_picard_metrics = true
roi = "${params.igenomes_base}/Hsapiens/GRCh38/regions/CMGG_coPGT-M_analyses_ROI_v1.bed"
diff --git a/conf/profiles/sWGS.config b/conf/profiles/sWGS.config
index 11be5b28..4497e094 100644
--- a/conf/profiles/sWGS.config
+++ b/conf/profiles/sWGS.config
@@ -1,5 +1,4 @@
params {
- aligner = "bowtie2"
run_coverage = false
disable_picard_metrics = true
}
diff --git a/conf/test.config b/conf/test.config
index 930c4538..f4ad2b2b 100644
--- a/conf/test.config
+++ b/conf/test.config
@@ -17,7 +17,6 @@ params {
// Input data
input = "${projectDir}/tests/inputs/fastq.yml"
igenomes_base = "s3://reference-data/genomes"
- aligner = "bwamem"
}
process {
diff --git a/docs/parameters.md b/docs/parameters.md
index f3b3df8e..914bd868 100644
--- a/docs/parameters.md
+++ b/docs/parameters.md
@@ -17,7 +17,6 @@ Define where the pipeline should find input data and save output data.
| Parameter | Description | Type | Default | Required | Hidden |
| ------------------------ | ----------------------------------------------------------------------- | --------- | ----------- | -------- | ------ |
-| `aligner` | Which aligner to use. Set to `false` to output fastq. | `string` | bowtie2 | True | |
| `markdup` | Which alignment postprocessor to use | `string` | bamsormadup | | |
| `run_coverage` | Run coverage analysis steps | `boolean` | True | | |
| `skip_trimming` | Skip adapter trimming | `boolean` | False | | |
diff --git a/main.nf b/main.nf
index c45b7344..9c2b4a22 100644
--- a/main.nf
+++ b/main.nf
@@ -45,7 +45,6 @@ workflow {
PREPROCESSING(
PIPELINE_INITIALISATION.out.samplesheet,
params.genomes,
- params.aligner,
params.markdup,
params.roi,
params.genelists,
diff --git a/nextflow.config b/nextflow.config
index fab6f6f3..44d91929 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -18,7 +18,6 @@ params {
igenomes_ignore = false
// Analysis options
- aligner = null
markdup = 'bamsormadup'
umi_aware = false
skip_trimming = false
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 67767d53..d7b52ec4 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -51,12 +51,6 @@
"description": "",
"default": "",
"properties": {
- "aligner": {
- "type": ["string", "boolean"],
- "default": "bowtie2",
- "description": "Which aligner to use",
- "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false]
- },
"markdup": {
"type": "string",
"default": "bamsormadup",
diff --git a/tests/default.nf.test b/tests/default.nf.test
index 6eb6875a..ba9b69e3 100644
--- a/tests/default.nf.test
+++ b/tests/default.nf.test
@@ -12,7 +12,6 @@ nextflow_pipeline {
when {
params {
input = "${projectDir}/tests/inputs/fastq.yml"
- aligner = "bwamem"
igenomes_base = "s3://reference-data/genomes"
outdir = "$outputDir"
}
@@ -29,7 +28,6 @@ nextflow_pipeline {
when {
params {
input = "${projectDir}/tests/inputs/flowcell.yml"
- aligner = "bwamem"
igenomes_base = "s3://reference-data/genomes"
outdir = "$outputDir"
}
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index 54a187ec..6caacb09 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -21,7 +21,8 @@ nextflow_workflow {
library: "test",
organism: "Homo sapiens",
tag: "WES",
- sample_type: "DNA"
+ sample_type: "DNA",
+ aligner: "bwamem",
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -43,13 +44,11 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
- // aligner
- input[2] = "bwamem"
// markdup
- input[3] = "bamsormadup"
+ input[2] = "bamsormadup"
// roi
- input[4] = "https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed"
- input[5] = null
+ input[3] = "https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed"
+ input[4] = null
"""
}
}
@@ -90,7 +89,8 @@ nextflow_workflow {
library: "test",
organism: "Homo sapiens",
tag: "WGS",
- sample_type: "DNA"
+ sample_type: "DNA",
+ aligner: "bwamem",
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -112,13 +112,11 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
- // aligner
- input[2] = "bwamem"
// markdup
- input[3] = "bamsormadup"
+ input[2] = "bamsormadup"
// roi
- input[4] = ""
- input[5] = null
+ input[3] = ""
+ input[4] = null
"""
}
}
@@ -162,7 +160,8 @@ nextflow_workflow {
library: "test",
organism: "Homo sapiens",
tag: "WES",
- sample_type: "DNA"
+ sample_type: "DNA",
+ aligner: "bwamem",
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -184,13 +183,11 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
- // aligner
- input[2] = "bwamem"
// markdup
- input[3] = "bamsormadup"
+ input[2] = "bamsormadup"
// roi
- input[4] = "https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed"
- input[5] = null
+ input[3] = "https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed"
+ input[4] = null
"""
}
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 29e8f295..292b5b49 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -37,7 +37,6 @@ workflow PREPROCESSING {
take:
ch_samplesheet // channel: samplesheet read in from --input
genomes // map: genome reference files
- aligner // string: global aligner to use
markdup // string: markdup method to use
roi // file: regions of interest bed file to be applied to all samples
genelists // file: directory containing genelist bed files for coverage analysis
@@ -166,11 +165,6 @@ workflow PREPROCESSING {
meta = meta + ["genome_data": [:]]
}
- // set the aligner
- if (aligner && !meta.aligner) {
- meta = meta + ["aligner": aligner]
- }
-
// set the ROI
// // Special case for coPGT samples
// // if there's no global ROI AND no sample speficic ROI
From 3907850fa3a78ce07c31f5e3f4cc7b796d89ab40 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 22:38:17 +0100
Subject: [PATCH 099/228] update changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a6414d52..85b50d0c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- The workflow now outputs data in a subdirectory per `library`, including a library specific MultiQC report
- Drop support for unaligned cram outputs.
- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
+- Drop support for globle `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
## v2.0.6
From eb69f58d7c6f6e8e7126393af405f5d8d0a6db01 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 22:38:36 +0100
Subject: [PATCH 100/228] typo
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 85b50d0c..0d4b7bef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- The workflow now outputs data in a subdirectory per `library`, including a library specific MultiQC report
- Drop support for unaligned cram outputs.
- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
-- Drop support for globle `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
+- Drop support for global `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
## v2.0.6
From 10ca10007b30f3d659168b22b9c49343c1eee7a8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 4 Dec 2025 22:56:08 +0100
Subject: [PATCH 101/228] update snapshot
---
tests/workflows/preprocessing.nf.test.snap | 70 +++++++++++-----------
1 file changed, 35 insertions(+), 35 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 89d55ce7..6c072d58 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -87,6 +87,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"readgroup": {
"CN": "CMGG",
@@ -104,7 +105,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
@@ -148,6 +148,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -157,7 +158,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -175,6 +175,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -184,7 +185,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -202,6 +202,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -211,7 +212,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -232,6 +232,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -241,7 +242,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -259,6 +259,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -268,7 +269,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -286,6 +286,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -295,7 +296,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -313,6 +313,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -322,7 +323,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -340,6 +340,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -349,7 +350,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -367,6 +367,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -376,7 +377,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -521,6 +521,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -530,7 +531,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -548,6 +548,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -557,7 +558,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -575,6 +575,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -584,7 +585,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -602,6 +602,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -611,7 +612,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -629,6 +629,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -638,7 +639,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -666,7 +666,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T22:06:58.57247"
+ "timestamp": "2025-12-04T22:49:24.788115"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -756,6 +756,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"readgroup": {
"CN": "CMGG",
@@ -773,7 +774,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
@@ -895,6 +895,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -904,7 +905,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -922,6 +922,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -931,7 +932,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -949,6 +949,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -958,7 +959,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -976,6 +976,7 @@
"organism": "Homo sapiens",
"tag": "WES",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -985,7 +986,6 @@
"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"
},
- "aligner": "bwamem",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
@@ -1009,7 +1009,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T22:11:37.660609"
+ "timestamp": "2025-12-04T22:53:59.211177"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1097,6 +1097,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"readgroup": {
"CN": "CMGG",
@@ -1114,7 +1115,6 @@
"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"
},
- "aligner": "bwamem",
"count": 1
},
"sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
@@ -1156,6 +1156,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1165,7 +1166,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1182,6 +1182,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1191,7 +1192,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1208,6 +1208,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1217,7 +1218,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1237,6 +1237,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1246,7 +1247,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1263,6 +1263,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1272,7 +1273,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1298,6 +1298,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1307,7 +1308,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1448,6 +1448,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1457,7 +1458,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1474,6 +1474,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1483,7 +1484,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1500,6 +1500,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1509,7 +1510,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1526,6 +1526,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1535,7 +1536,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1552,6 +1552,7 @@
"organism": "Homo sapiens",
"tag": "WGS",
"sample_type": "DNA",
+ "aligner": "bwamem",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1561,7 +1562,6 @@
"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"
},
- "aligner": "bwamem",
"id": "sample1"
}
},
@@ -1588,6 +1588,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T22:09:54.979336"
+ "timestamp": "2025-12-04T22:52:15.051988"
}
}
\ No newline at end of file
From 9f433ebd1879d3c0711d7910d27ef44c3eb71cc0 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 5 Dec 2025 09:02:51 +0100
Subject: [PATCH 102/228] add GCP error codes to retry clause
---
conf/base.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conf/base.config b/conf/base.config
index 67db29f3..27606500 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -14,7 +14,7 @@ process {
memory = { 6.GB * task.attempt }
time = { 4.h * task.attempt }
- errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001) ? 'retry' : 'finish' }
+ errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
maxRetries = 3
maxErrors = '-1'
From 78655d03839c95be225b6882baba019b71b0287f Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Sun, 7 Dec 2025 08:00:14 +0100
Subject: [PATCH 103/228] improve MQC pool name
---
conf/modules.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conf/modules.config b/conf/modules.config
index e1603297..0f975540 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -253,7 +253,7 @@ process {
}
withName: MULTIQC_LIBRARY {
- ext.prefix = { meta.id ? "multiqc_library_${meta.id}" : "multiqc_library" }
+ ext.prefix = { meta.id ? "${meta.id}" : "multiqc_library" }
ext.args = { meta.id ? "--title \"${meta.id} - Pool Summary\"" : '' }
}
}
From 77c2139d278082201acd1648c3bec92451cbf2c9 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 8 Dec 2025 14:52:34 +0100
Subject: [PATCH 104/228] feat/improve_fq_shard
---
CHANGELOG.md | 1 +
conf/modules.config | 13 ++++++-------
docs/parameters.md | 1 +
nextflow.config | 1 +
nextflow_schema.json | 15 +++++++++++++++
5 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0d4b7bef..2648d1d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Drop support for unaligned cram outputs.
- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
- Drop support for global `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
+- Simplify fastq sharding and make it user configurable via the `split_fastq` parameter.
## v2.0.6
diff --git a/conf/modules.config b/conf/modules.config
index 0f975540..a001512a 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -32,13 +32,12 @@ process {
withName: FASTP {
ext.args = {
[
- meta.single_end && reads.size() > 5000000000 ? "--split_by_lines 400000000" : "",
- !meta.single_end && reads.any { f -> f.size() > 5000000000 } ? "--split_by_lines 400000000" : "",
- params.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
- params.trim_front > 0 ? "--trim_front1 ${params.trim_front}" : "",
- params.trim_tail > 0 ? "--trim_tail1 ${params.trim_tail}" : "",
- params.adapter_R1 ? "--adapter_sequence ${params.adapter_R1}" : "",
- params.adapter_R2 ? "--adapter_sequence_r2 ${params.adapter_R2}" : "",
+ params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
+ params.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
+ params.trim_front > 0 ? "--trim_front1 ${params.trim_front}" : "",
+ params.trim_tail > 0 ? "--trim_tail1 ${params.trim_tail}" : "",
+ params.adapter_R1 ? "--adapter_sequence ${params.adapter_R1}" : "",
+ params.adapter_R2 ? "--adapter_sequence_r2 ${params.adapter_R2}" : "",
"--compression 1",
].join(" ").trim()
}
diff --git a/docs/parameters.md b/docs/parameters.md
index 914bd868..18c594f1 100644
--- a/docs/parameters.md
+++ b/docs/parameters.md
@@ -20,6 +20,7 @@ Define where the pipeline should find input data and save output data.
| `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 | | |
diff --git a/nextflow.config b/nextflow.config
index 44d91929..cd01f849 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -21,6 +21,7 @@ params {
markdup = 'bamsormadup'
umi_aware = false
skip_trimming = false
+ split_fastq = 100000000
trim_front = 0
trim_tail = 0
adapter_R1 = null
diff --git a/nextflow_schema.json b/nextflow_schema.json
index d7b52ec4..efbaa2c0 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -72,6 +72,21 @@
"description": "Skip adapter trimming",
"default": false
},
+ "split_fastq": {
+ "type": "integer",
+ "oneOf": [
+ {
+ "minimum": 250
+ },
+ {
+ "const": 0
+ }
+ ],
+ "default": 100000000,
+ "fa_icon": "fas fa-clock",
+ "description": "Specify how many reads each split of a FastQ file contains. Set 0 to turn off splitting at all.",
+ "help_text": "Use 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."
+ },
"trim_front": {
"type": "integer",
"default": 0,
From aa5642bbb83a6d7841a5c2ffb9b07d831655c242 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 8 Dec 2025 22:28:23 +0100
Subject: [PATCH 105/228] add optimized resources for WGS on GCP
---
conf/modules.config | 14 +-----
conf/profiles/gcp.config | 92 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 94 insertions(+), 12 deletions(-)
create mode 100644 conf/profiles/gcp.config
diff --git a/conf/modules.config b/conf/modules.config
index a001512a..13de8a2f 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -14,11 +14,6 @@ process {
// BCL convert
withName: BCLCONVERT {
- cpus = 32
- memory = 128.GB
- disk = { 1.TB * task.attempt }
- stageOutMode = 'copy'
-
ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
@@ -227,11 +222,6 @@ process {
ext.prefix = { "${meta.id}.coverage" }
}
- //// CoverageQC (Multiqc)
- // withName: ".*:COVERAGE:COVERAGEQC" {
- // ext.args = { "--title \"Coverage ${meta.samplename ?: meta.id}\" }
- // }
-
// QC
withName: '.*BAM_QC.*' {
@@ -240,8 +230,8 @@ process {
//// Picard
withName: '.*PICARD.*' {
- memory = { 8.GB * task.attempt }
- ext.args = "--MAX_RECORDS_IN_RAM 15000000"
+ memory = { 16.GB * task.attempt }
+ ext.args = "--MAX_RECORDS_IN_RAM 50000000"
}
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
new file mode 100644
index 00000000..7460fe7d
--- /dev/null
+++ b/conf/profiles/gcp.config
@@ -0,0 +1,92 @@
+// Tweaked resources for GCP
+
+process {
+ executor = 'google-batch'
+ disk = 100.GB
+ errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
+ maxRetries = 5
+
+ // tentative fix for `cannot stat` error
+ // https://github.com/nextflow-io/nextflow/issues/6213#issuecomment-3173533808
+ stageOutMode = 'copy'
+
+ // BCL convert resources
+ withName: '.*PREPROCESSING:BCL_DEMULTIPLEX:BCLCONVERT' {
+ cpus = 32
+ memory = { 64.GB * task.attempt }
+ disk = { 1.TB * task.attempt }
+ }
+ withName: '.*PREPROCESSING:BCL_DEMULTIPLEX:BCL2FASTQ' {
+ // Never used
+ }
+
+ // Trimming resources
+ withName: '.*PREPROCESSING:FASTP' {
+ memory = { 4.GB * task.attempt }
+ }
+
+ // Alignment resources
+ // DNA
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
+ memory = 64.GB
+ }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
+ memory = 64.GB
+ }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
+ memory = 64.GB
+ }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {
+ memory = 64.GB
+ }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
+ memory = 64.GB
+ }
+ // RNA
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {
+ memory = 64.GB
+ }
+
+ // Alignment post-processing resources
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
+ cpus = 16
+ disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
+ memory = 64.GB
+ time = 24.h
+ }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORT' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
+
+ // Coverage QC resources
+ withName: '.*PREPROCESSING:COVERAGE:MOSDEPTH' {
+ cpus = 4
+ memory = 4.GB
+ }
+ withName: '.*PREPROCESSING:COVERAGE:SAMTOOLS_COVERAGE' {
+ cpus = 1
+ memory = 1.GB
+ }
+ withName: '.*PREPROCESSING:COVERAGE:PANELCOVERAGE' {}
+
+ // Bam QC resources
+ withName: '.*PREPROCESSING:BAM_QC:SAMTOOLS_.*$' {
+ cpus = 1
+ memory = 1.GB
+ }
+ withName: '.*PREPROCESSING:BAM_QC:PICARD_.*$' {
+ cpus = 1
+ memory = 16.GB
+ time = 24.h
+ }
+
+ // Misc resources
+ withName: '.*PREPROCESSING:MD5SUM' {
+ cpus = 1
+ memory = 128.MB
+ }
+ withName: '.*PREPROCESSING:MULTIQC_.*$' {
+ cpus = 1
+ memory = 4.GB
+ }
+}
From 7b3fb476a66d1cfd9f5455d99f8647e8243c2cd0 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 8 Dec 2025 22:31:55 +0100
Subject: [PATCH 106/228] add profile to config
---
nextflow.config | 2 ++
1 file changed, 2 insertions(+)
diff --git a/nextflow.config b/nextflow.config
index cd01f849..f3ec3448 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -184,6 +184,8 @@ profiles {
}
test { includeConfig 'conf/test.config' }
test_full { includeConfig 'conf/test_full.config' }
+ // resource profiles
+ gcp { includeConfig 'conf/profiles/gcp.config' }
s3_ugent { includeConfig 'conf/profiles/s3_ugent.config' }
// analysis profiles
sWGS { includeConfig 'conf/profiles/sWGS.config' }
From e47543786f498e7e79ec76f74523aa67df3c610d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 9 Dec 2025 10:59:22 +0100
Subject: [PATCH 107/228] apply cpu/mem as default, make module selectors more
specific
---
conf/modules.config | 87 +++++++++++++++++++++++++---------------
conf/profiles/gcp.config | 62 ++++++++--------------------
2 files changed, 71 insertions(+), 78 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 13de8a2f..af8e1c73 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -13,7 +13,9 @@
process {
// BCL convert
- withName: BCLCONVERT {
+ withName: '.*PREPROCESSING:BCL_DEMULTIPLEX:BCLCONVERT' {
+ cpus = 16
+ memory = { 64.GB * task.attempt }
ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
@@ -24,7 +26,9 @@ process {
}
// FastP
- withName: FASTP {
+ withName: '.*PREPROCESSING:FASTP' {
+ cpus = 4
+ memory = { 4.GB * task.attempt }
ext.args = {
[
params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
@@ -38,19 +42,6 @@ process {
}
}
- // FASTQ_TO_UCRAM
- //// Samtools Import
- withName: '.*FASTQ_TO_UCRAM:SAMTOOLS_IMPORT' {
- label = "process_medium"
- ext.args = {
- [
- meta.readgroup ? "--rg-line \"@RG\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\t") + "\"" : "",
- "--output-fmt cram,version=3.0",
- "--output-fmt-option archive",
- ].join(" ").trim()
- }
- }
-
// FASTQ_TO_CRAM
// Readgroup
// Example:
@@ -63,7 +54,9 @@ process {
// SM : samplename
//// Bowtie2
- withName: BOWTIE2_ALIGN {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
+ cpus = 16
+ memory = 32.GB
ext.args = {
[
"--local",
@@ -76,7 +69,9 @@ process {
}
//// BWA mem/BWA mem2
- withName: 'BWAMEM.*_MEM' {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
+ cpus = 16
+ memory = 32.GB
ext.args = {
[
"-K 100000000",
@@ -91,7 +86,9 @@ process {
}
//// DRAGEN
- withName: DRAGMAP_ALIGN {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
+ cpus = 16
+ memory = 32.GB
ext.args = {
[
meta.readgroup ? "--RGSM \"@RG\\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\\t") + "\"" : ""
@@ -109,7 +106,9 @@ process {
// -xf 2 : expansion factor for reading compressed data
//// SNAP
- withName: SNAPALIGNER_ALIGN {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
+ cpus = 16
+ memory = 64.GB
ext.args = {
[
"-b-",
@@ -125,7 +124,9 @@ process {
}
//// STROBEALIGN
- withName: STROBEALIGN {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {
+ cpus = 16
+ memory = 32.GB
ext.args = {
[
meta.readgroup ? "--rg-id ${meta.readgroup.ID}" : "",
@@ -136,7 +137,9 @@ process {
}
//// STAR
- withName: STAR_ALIGN {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {
+ cpus = 16
+ memory = 64.GB
ext.args = {
[
"--readFilesCommand gunzip -c",
@@ -153,7 +156,9 @@ process {
//// Samtools sormadup
- withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
+ cpus = 16
+ memory = 64.GB
ext.prefix = { "${meta.id}.merged" }
ext.args5 = {
[
@@ -169,7 +174,9 @@ process {
}
//// Samtools multisort
- withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORT' {
+ cpus = 16
+ memory = 64.GB
ext.prefix = { "${meta.id}.merged" }
ext.args = {
[
@@ -181,7 +188,9 @@ process {
}
//// BioBamBam Bamsormadup
- withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {
+ cpus = 8
+ memory = 16.GB
ext.prefix = { "${meta.id}.merged" }
ext.args = {
[
@@ -193,9 +202,9 @@ process {
}
//// Samtools convert
- withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {
cpus = 8
- memory = 64.GB
+ memory = 8.GB
ext.args = {
[
"-C",
@@ -207,7 +216,7 @@ process {
// coverage
//// Mosdepth
- withName: '.*COVERAGE:MOSDEPTH' {
+ withName: '.*PREPROCESSING:COVERAGE:MOSDEPTH' {
cpus = 4
memory = { 4.GB * task.attempt }
ext.args = [
@@ -218,30 +227,44 @@ process {
}
//// Samtools coverage
- withName: '.*:COVERAGE:SAMTOOLS_COVERAGE' {
+ withName: '.*PREPROCESSING:COVERAGE:SAMTOOLS_COVERAGE' {
+ cpus = 1
+ memory = 1.GB
ext.prefix = { "${meta.id}.coverage" }
}
// QC
- withName: '.*BAM_QC.*' {
+ withName: '.*PREPROCESSING:BAM_QC:SAMTOOLS_.*$' {
cpus = 1
+ memory = 1.GB
}
//// Picard
- withName: '.*PICARD.*' {
+ withName: '.*PREPROCESSING:BAM_QC:PICARD_.*$' {
+ cpus = 1
memory = { 16.GB * task.attempt }
ext.args = "--MAX_RECORDS_IN_RAM 50000000"
}
+ withName: '.*PREPROCESSING:MD5SUM' {
+ cpus = 1
+ memory = 128.MB
+ }
// MultiQC
- withName: MULTIQC_MAIN {
+ withName: '.*PREPROCESSING:MULTIQC_.*$' {
+ cpus = 1
+ memory = 4.GB
+ }
+ withName: '.*PREPROCESSING:MULTIQC_MAIN' {
ext.prefix = { params.multiqc_title ? params.multiqc_title : "multiqc" }
ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' }
}
- withName: MULTIQC_LIBRARY {
+ withName: '.*PREPROCESSING:MULTIQC_LIBRARY' {
+ cpus = 1
+ memory = 4.GB
ext.prefix = { meta.id ? "${meta.id}" : "multiqc_library" }
ext.args = { meta.id ? "--title \"${meta.id} - Pool Summary\"" : '' }
}
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 7460fe7d..6ab54a96 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -21,72 +21,42 @@ process {
}
// Trimming resources
- withName: '.*PREPROCESSING:FASTP' {
- memory = { 4.GB * task.attempt }
- }
+ withName: '.*PREPROCESSING:FASTP' {}
// Alignment resources
// DNA
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
- memory = 64.GB
- }
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
- memory = 64.GB
- }
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
- memory = 64.GB
- }
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {
- memory = 64.GB
- }
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
- memory = 64.GB
- }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {}
// RNA
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {
- memory = 64.GB
- }
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {}
// Alignment post-processing resources
withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
- cpus = 16
disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
- memory = 64.GB
time = 24.h
}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORT' {}
+ withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORT' {
+ disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
+ time = 24.h
+ }
withName: '.*PREPROCESSING:FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
// Coverage QC resources
- withName: '.*PREPROCESSING:COVERAGE:MOSDEPTH' {
- cpus = 4
- memory = 4.GB
- }
- withName: '.*PREPROCESSING:COVERAGE:SAMTOOLS_COVERAGE' {
- cpus = 1
- memory = 1.GB
- }
+ withName: '.*PREPROCESSING:COVERAGE:MOSDEPTH' {}
+ withName: '.*PREPROCESSING:COVERAGE:SAMTOOLS_COVERAGE' {}
withName: '.*PREPROCESSING:COVERAGE:PANELCOVERAGE' {}
// Bam QC resources
- withName: '.*PREPROCESSING:BAM_QC:SAMTOOLS_.*$' {
- cpus = 1
- memory = 1.GB
- }
+ withName: '.*PREPROCESSING:BAM_QC:SAMTOOLS_.*$' {}
withName: '.*PREPROCESSING:BAM_QC:PICARD_.*$' {
- cpus = 1
- memory = 16.GB
time = 24.h
}
// Misc resources
- withName: '.*PREPROCESSING:MD5SUM' {
- cpus = 1
- memory = 128.MB
- }
- withName: '.*PREPROCESSING:MULTIQC_.*$' {
- cpus = 1
- memory = 4.GB
- }
+ withName: '.*PREPROCESSING:MD5SUM' {}
+ withName: '.*PREPROCESSING:MULTIQC_.*$' {}
}
From ef81280f397dd3f85de292adbe20cd3d9be4f7b1 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 9 Dec 2025 11:11:27 +0100
Subject: [PATCH 108/228] update snapshot
---
tests/workflows/preprocessing.nf.test.snap | 74 +++++++++++-----------
1 file changed, 37 insertions(+), 37 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 6c072d58..82cf9c36 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -108,7 +108,7 @@
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
- "sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
+ "sample1.fastp.json:md5,2edca71b00e4804eb7b39ff72f1c304a"
]
],
"md5sums": [
@@ -189,7 +189,7 @@
"id": "sample1"
}
},
- "sample1.per-base.bed.gz:md5,46115d39863826ae9199340c2eb888a6"
+ "sample1.per-base.bed.gz:md5,e5c10c94f3870f6ed2c75a904e9ade7f"
]
],
"mosdepth_per_base_csi": [
@@ -216,7 +216,7 @@
"id": "sample1"
}
},
- "sample1.per-base.bed.gz.csi:md5,12fdbaf668bda28541b869adecc15dc7"
+ "sample1.per-base.bed.gz.csi:md5,b9223463b0f024768ebbbb3e42ace8da"
]
],
"mosdepth_per_base_d4": [
@@ -327,7 +327,7 @@
"id": "sample1"
}
},
- "sample1.regions.bed.gz:md5,63a7fee57ae572a661fba2d14c6db1b4"
+ "sample1.regions.bed.gz:md5,6b7cc84380695011ffd0681dc79cefaa"
]
],
"mosdepth_regions_csi": [
@@ -354,7 +354,7 @@
"id": "sample1"
}
},
- "sample1.regions.bed.gz.csi:md5,531956423eb6b53186ae4adc39e0e61e"
+ "sample1.regions.bed.gz.csi:md5,45cbd8c0f3d231c114a2d79d7dd21a80"
]
],
"mosdepth_summary": [
@@ -381,7 +381,7 @@
"id": "sample1"
}
},
- "sample1.mosdepth.summary.txt:md5,cfd81f854b864f9630e8831b48cfc9a0"
+ "sample1.mosdepth.summary.txt:md5,f1f18d9bd23783bedb7f9e246e192a7e"
]
],
"mosdepth_thresholds_bed": [
@@ -391,13 +391,13 @@
],
"multiqc_library_data": [
- "multiqc_library_test_data"
+ "test_data"
],
"multiqc_library_plots": [
- "multiqc_library_test_plots"
+ "test_plots"
],
"multiqc_library_report": [
- "multiqc_library_test.html"
+ "test.html"
],
"multiqc_main_data": [
[
@@ -535,7 +535,7 @@
"id": "sample1"
}
},
- "sample1.coverage.txt:md5,82e6e6b4163459aeca0b9dd40ef67d13"
+ "sample1.coverage.txt:md5,656b7371132475783094d80b7d2292b5"
]
],
"samtools_flagstat": [
@@ -562,7 +562,7 @@
"id": "sample1"
}
},
- "sample1.flagstat:md5,da197e74ff53116dd9b8b1241f468aac"
+ "sample1.flagstat:md5,cd826b1749737d52499cf543d101ecd2"
]
],
"samtools_idxstats": [
@@ -589,7 +589,7 @@
"id": "sample1"
}
},
- "sample1.idxstats:md5,4e1b204d3bb59e42022c5d84be705ed8"
+ "sample1.idxstats:md5,ecc89a474dced28b0610f17a82785007"
]
],
"samtools_stats": [
@@ -616,7 +616,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,33a10d02ce404301e012f07841815f59"
+ "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
]
],
"sormadup_metrics": [
@@ -643,7 +643,7 @@
"id": "sample1"
}
},
- "sample1.merged.metrics.txt:md5,ba50ddef3f0147526ed1f01a98c47ed6"
+ "sample1.merged.metrics.txt:md5,01b7286134f5cb6530c3bab2c86fd169"
]
],
"versions": [
@@ -666,7 +666,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T22:49:24.788115"
+ "timestamp": "2025-12-09T11:03:22.986076"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -777,7 +777,7 @@
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
- "sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
+ "sample1.fastp.json:md5,2edca71b00e4804eb7b39ff72f1c304a"
]
],
"md5sums": [
@@ -844,13 +844,13 @@
],
"multiqc_library_data": [
- "multiqc_library_test_data"
+ "test_data"
],
"multiqc_library_plots": [
- "multiqc_library_test_plots"
+ "test_plots"
],
"multiqc_library_report": [
- "multiqc_library_test.html"
+ "test.html"
],
"multiqc_main_data": [
[
@@ -909,7 +909,7 @@
"id": "sample1"
}
},
- "sample1.flagstat:md5,da197e74ff53116dd9b8b1241f468aac"
+ "sample1.flagstat:md5,cd826b1749737d52499cf543d101ecd2"
]
],
"samtools_idxstats": [
@@ -936,7 +936,7 @@
"id": "sample1"
}
},
- "sample1.idxstats:md5,4e1b204d3bb59e42022c5d84be705ed8"
+ "sample1.idxstats:md5,ecc89a474dced28b0610f17a82785007"
]
],
"samtools_stats": [
@@ -963,7 +963,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,33a10d02ce404301e012f07841815f59"
+ "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
]
],
"sormadup_metrics": [
@@ -990,7 +990,7 @@
"id": "sample1"
}
},
- "sample1.merged.metrics.txt:md5,ba50ddef3f0147526ed1f01a98c47ed6"
+ "sample1.merged.metrics.txt:md5,01b7286134f5cb6530c3bab2c86fd169"
]
],
"versions": [
@@ -1009,7 +1009,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T22:53:59.211177"
+ "timestamp": "2025-12-09T11:09:14.114309"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1117,7 +1117,7 @@
},
"count": 1
},
- "sample1.fastp.json:md5,caf903cc79784ceaa71d6ef743c02ff3"
+ "sample1.fastp.json:md5,2edca71b00e4804eb7b39ff72f1c304a"
]
],
"md5sums": [
@@ -1195,7 +1195,7 @@
"id": "sample1"
}
},
- "sample1.per-base.bed.gz:md5,46115d39863826ae9199340c2eb888a6"
+ "sample1.per-base.bed.gz:md5,e5c10c94f3870f6ed2c75a904e9ade7f"
]
],
"mosdepth_per_base_csi": [
@@ -1221,7 +1221,7 @@
"id": "sample1"
}
},
- "sample1.per-base.bed.gz.csi:md5,12fdbaf668bda28541b869adecc15dc7"
+ "sample1.per-base.bed.gz.csi:md5,b9223463b0f024768ebbbb3e42ace8da"
]
],
"mosdepth_per_base_d4": [
@@ -1311,7 +1311,7 @@
"id": "sample1"
}
},
- "sample1.mosdepth.summary.txt:md5,9799b90b7db86a6eab36f33b04a67ae0"
+ "sample1.mosdepth.summary.txt:md5,699b955719b06ff290edbe0692492213"
]
],
"mosdepth_thresholds_bed": [
@@ -1321,13 +1321,13 @@
],
"multiqc_library_data": [
- "multiqc_library_test_data"
+ "test_data"
],
"multiqc_library_plots": [
- "multiqc_library_test_plots"
+ "test_plots"
],
"multiqc_library_report": [
- "multiqc_library_test.html"
+ "test.html"
],
"multiqc_main_data": [
[
@@ -1461,7 +1461,7 @@
"id": "sample1"
}
},
- "sample1.coverage.txt:md5,82e6e6b4163459aeca0b9dd40ef67d13"
+ "sample1.coverage.txt:md5,656b7371132475783094d80b7d2292b5"
]
],
"samtools_flagstat": [
@@ -1487,7 +1487,7 @@
"id": "sample1"
}
},
- "sample1.flagstat:md5,da197e74ff53116dd9b8b1241f468aac"
+ "sample1.flagstat:md5,cd826b1749737d52499cf543d101ecd2"
]
],
"samtools_idxstats": [
@@ -1513,7 +1513,7 @@
"id": "sample1"
}
},
- "sample1.idxstats:md5,4e1b204d3bb59e42022c5d84be705ed8"
+ "sample1.idxstats:md5,ecc89a474dced28b0610f17a82785007"
]
],
"samtools_stats": [
@@ -1539,7 +1539,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,33a10d02ce404301e012f07841815f59"
+ "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
]
],
"sormadup_metrics": [
@@ -1565,7 +1565,7 @@
"id": "sample1"
}
},
- "sample1.merged.metrics.txt:md5,ba50ddef3f0147526ed1f01a98c47ed6"
+ "sample1.merged.metrics.txt:md5,01b7286134f5cb6530c3bab2c86fd169"
]
],
"versions": [
@@ -1588,6 +1588,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-04T22:52:15.051988"
+ "timestamp": "2025-12-09T11:06:50.62591"
}
}
\ No newline at end of file
From bac9ba626cad01d486829a746a2201830a388dcc Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 9 Dec 2025 12:09:18 +0100
Subject: [PATCH 109/228] fix process selectors
---
conf/modules.config | 40 ++++++++++++++++++++--------------------
conf/profiles/gcp.config | 40 ++++++++++++++++++++--------------------
2 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index af8e1c73..b895b341 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -13,7 +13,7 @@
process {
// BCL convert
- withName: '.*PREPROCESSING:BCL_DEMULTIPLEX:BCLCONVERT' {
+ withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' {
cpus = 16
memory = { 64.GB * task.attempt }
ext.args = {
@@ -26,7 +26,7 @@ process {
}
// FastP
- withName: '.*PREPROCESSING:FASTP' {
+ withName: '.*FASTP' {
cpus = 4
memory = { 4.GB * task.attempt }
ext.args = {
@@ -54,7 +54,7 @@ process {
// SM : samplename
//// Bowtie2
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -69,7 +69,7 @@ process {
}
//// BWA mem/BWA mem2
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -86,7 +86,7 @@ process {
}
//// DRAGEN
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -106,7 +106,7 @@ process {
// -xf 2 : expansion factor for reading compressed data
//// SNAP
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
cpus = 16
memory = 64.GB
ext.args = {
@@ -124,7 +124,7 @@ process {
}
//// STROBEALIGN
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -137,7 +137,7 @@ process {
}
//// STAR
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {
cpus = 16
memory = 64.GB
ext.args = {
@@ -156,7 +156,7 @@ process {
//// Samtools sormadup
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
+ withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
cpus = 16
memory = 64.GB
ext.prefix = { "${meta.id}.merged" }
@@ -174,7 +174,7 @@ process {
}
//// Samtools multisort
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORT' {
+ withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
cpus = 16
memory = 64.GB
ext.prefix = { "${meta.id}.merged" }
@@ -188,7 +188,7 @@ process {
}
//// BioBamBam Bamsormadup
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {
+ withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {
cpus = 8
memory = 16.GB
ext.prefix = { "${meta.id}.merged" }
@@ -202,7 +202,7 @@ process {
}
//// Samtools convert
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {
+ withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {
cpus = 8
memory = 8.GB
ext.args = {
@@ -216,7 +216,7 @@ process {
// coverage
//// Mosdepth
- withName: '.*PREPROCESSING:COVERAGE:MOSDEPTH' {
+ withName: '.*COVERAGE:MOSDEPTH' {
cpus = 4
memory = { 4.GB * task.attempt }
ext.args = [
@@ -227,7 +227,7 @@ process {
}
//// Samtools coverage
- withName: '.*PREPROCESSING:COVERAGE:SAMTOOLS_COVERAGE' {
+ withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {
cpus = 1
memory = 1.GB
ext.prefix = { "${meta.id}.coverage" }
@@ -235,34 +235,34 @@ process {
// QC
- withName: '.*PREPROCESSING:BAM_QC:SAMTOOLS_.*$' {
+ withName: '.*BAM_QC:SAMTOOLS_.*$' {
cpus = 1
memory = 1.GB
}
//// Picard
- withName: '.*PREPROCESSING:BAM_QC:PICARD_.*$' {
+ withName: '.*BAM_QC:PICARD_.*$' {
cpus = 1
memory = { 16.GB * task.attempt }
ext.args = "--MAX_RECORDS_IN_RAM 50000000"
}
- withName: '.*PREPROCESSING:MD5SUM' {
+ withName: '.*MD5SUM' {
cpus = 1
memory = 128.MB
}
// MultiQC
- withName: '.*PREPROCESSING:MULTIQC_.*$' {
+ withName: '.*MULTIQC_.*$' {
cpus = 1
memory = 4.GB
}
- withName: '.*PREPROCESSING:MULTIQC_MAIN' {
+ withName: '.*MULTIQC_MAIN' {
ext.prefix = { params.multiqc_title ? params.multiqc_title : "multiqc" }
ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' }
}
- withName: '.*PREPROCESSING:MULTIQC_LIBRARY' {
+ withName: '.*MULTIQC_LIBRARY' {
cpus = 1
memory = 4.GB
ext.prefix = { meta.id ? "${meta.id}" : "multiqc_library" }
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 6ab54a96..2662a4b8 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -11,52 +11,52 @@ process {
stageOutMode = 'copy'
// BCL convert resources
- withName: '.*PREPROCESSING:BCL_DEMULTIPLEX:BCLCONVERT' {
+ withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' {
cpus = 32
memory = { 64.GB * task.attempt }
disk = { 1.TB * task.attempt }
}
- withName: '.*PREPROCESSING:BCL_DEMULTIPLEX:BCL2FASTQ' {
+ withName: '.*BCL_DEMULTIPLEX:BCL2FASTQ' {
// Never used
}
// Trimming resources
- withName: '.*PREPROCESSING:FASTP' {}
+ withName: '.*FASTP' {}
// Alignment resources
// DNA
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {}
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {}
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {}
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {}
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {}
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {}
// RNA
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {}
+ withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {}
// Alignment post-processing resources
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
+ withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
time = 24.h
}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_SORT' {
+ withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
time = 24.h
}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
- withName: '.*PREPROCESSING:FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
+ withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
+ withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
// Coverage QC resources
- withName: '.*PREPROCESSING:COVERAGE:MOSDEPTH' {}
- withName: '.*PREPROCESSING:COVERAGE:SAMTOOLS_COVERAGE' {}
- withName: '.*PREPROCESSING:COVERAGE:PANELCOVERAGE' {}
+ withName: '.*COVERAGE:MOSDEPTH' {}
+ withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {}
+ withName: '.*COVERAGE:PANELCOVERAGE' {}
// Bam QC resources
- withName: '.*PREPROCESSING:BAM_QC:SAMTOOLS_.*$' {}
- withName: '.*PREPROCESSING:BAM_QC:PICARD_.*$' {
+ withName: '.*BAM_QC:SAMTOOLS_.*$' {}
+ withName: '.*BAM_QC:PICARD_.*$' {
time = 24.h
}
// Misc resources
- withName: '.*PREPROCESSING:MD5SUM' {}
- withName: '.*PREPROCESSING:MULTIQC_.*$' {}
+ withName: '.*MD5SUM' {}
+ withName: '.*MULTIQC_.*$' {}
}
From 02b268cb5500a799baa0b61bf15d1ceb5e9093a8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 9 Dec 2025 12:13:19 +0100
Subject: [PATCH 110/228] update snapshots
---
tests/subworkflows/local/coverage/main.nf.test.snap | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tests/subworkflows/local/coverage/main.nf.test.snap b/tests/subworkflows/local/coverage/main.nf.test.snap
index 2891b942..4df77336 100644
--- a/tests/subworkflows/local/coverage/main.nf.test.snap
+++ b/tests/subworkflows/local/coverage/main.nf.test.snap
@@ -35,7 +35,7 @@
"single_end": false,
"tag": "WES"
},
- "test.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
+ "test.coverage.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
]
],
"13": [
@@ -242,7 +242,7 @@
"single_end": false,
"tag": "WES"
},
- "test.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
+ "test.coverage.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
]
],
"versions": [
@@ -256,7 +256,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T12:34:24.897893"
+ "timestamp": "2025-12-09T12:02:48.263146"
},
"Coverage - seqcap": {
"content": [
@@ -294,7 +294,7 @@
"single_end": false,
"tag": "seqcap"
},
- "test.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
+ "test.coverage.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
]
],
"13": [
@@ -486,7 +486,7 @@
"single_end": false,
"tag": "seqcap"
},
- "test.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
+ "test.coverage.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
]
],
"versions": [
@@ -499,6 +499,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T12:34:05.200571"
+ "timestamp": "2025-12-09T12:02:26.604953"
}
}
\ No newline at end of file
From 419f66ef1aaa0b90fb608ee804676233ae2d1115 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 9 Dec 2025 12:41:02 +0100
Subject: [PATCH 111/228] fix process selectors even more
---
conf/modules.config | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index b895b341..7cd68402 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -54,7 +54,7 @@ process {
// SM : samplename
//// Bowtie2
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
+ withName: '.*FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -69,7 +69,7 @@ process {
}
//// BWA mem/BWA mem2
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
+ withName: '.*FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -86,7 +86,7 @@ process {
}
//// DRAGEN
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
+ withName: '.*FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -106,7 +106,7 @@ process {
// -xf 2 : expansion factor for reading compressed data
//// SNAP
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
+ withName: '.*FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
cpus = 16
memory = 64.GB
ext.args = {
@@ -124,7 +124,7 @@ process {
}
//// STROBEALIGN
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {
+ withName: '.*FASTQ_ALIGN_DNA:STROBEALIGN' {
cpus = 16
memory = 32.GB
ext.args = {
@@ -137,7 +137,7 @@ process {
}
//// STAR
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {
+ withName: '.*FASTQ_ALIGN_RNA:STAR_ALIGN' {
cpus = 16
memory = 64.GB
ext.args = {
From 6b648ddc387bde7cb4130e349aefa51eeabe7078 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 10 Dec 2025 10:41:03 +0100
Subject: [PATCH 112/228] gcp: comment unused selectors
---
conf/profiles/gcp.config | 33 +++++++++++++++------------------
1 file changed, 15 insertions(+), 18 deletions(-)
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 2662a4b8..47cc2481 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -16,22 +16,19 @@ process {
memory = { 64.GB * task.attempt }
disk = { 1.TB * task.attempt }
}
- withName: '.*BCL_DEMULTIPLEX:BCL2FASTQ' {
- // Never used
- }
// Trimming resources
- withName: '.*FASTP' {}
+ // withName: '.*FASTP' {}
// Alignment resources
// DNA
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {}
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {}
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {}
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {}
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {}
+ // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {}
+ // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {}
+ // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {}
+ // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {}
+ // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {}
// RNA
- withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {}
+ // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {}
// Alignment post-processing resources
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
@@ -42,21 +39,21 @@ process {
disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
time = 24.h
}
- withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
- withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
+ // withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
+ // withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
// Coverage QC resources
- withName: '.*COVERAGE:MOSDEPTH' {}
- withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {}
- withName: '.*COVERAGE:PANELCOVERAGE' {}
+ // withName: '.*COVERAGE:MOSDEPTH' {}
+ // withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {}
+ // withName: '.*COVERAGE:PANELCOVERAGE' {}
// Bam QC resources
- withName: '.*BAM_QC:SAMTOOLS_.*$' {}
+ // withName: '.*BAM_QC:SAMTOOLS_.*$' {}
withName: '.*BAM_QC:PICARD_.*$' {
time = 24.h
}
// Misc resources
- withName: '.*MD5SUM' {}
- withName: '.*MULTIQC_.*$' {}
+ // withName: '.*MD5SUM' {}
+ // withName: '.*MULTIQC_.*$' {}
}
From 6ae79743761abbfeabeba672d0f914068a21e76e Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 10 Dec 2025 14:29:34 +0100
Subject: [PATCH 113/228] update gcp profile
---
conf/profiles/gcp.config | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 47cc2481..1d3b072d 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -32,11 +32,11 @@ process {
// Alignment post-processing resources
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
- disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
+ disk = { input instanceof List ? input.size().sum() * 3 * task.attempt : input.size() * 3 * task.attempt }
time = 24.h
}
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
- disk = { input instanceof List ? input.size().sum() * 2 * task.attempt : input.size() * 2 * task.attempt }
+ disk = { input instanceof List ? input.size().sum() * 3 * task.attempt : input.size() * 3 * task.attempt }
time = 24.h
}
// withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
From ae5956e9c9d3d636522c1f19946f6d376834eaf2 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 10 Dec 2025 15:35:15 +0100
Subject: [PATCH 114/228] bump multiqc
---
modules.json | 2 +-
modules/nf-core/multiqc/environment.yml | 2 +-
modules/nf-core/multiqc/main.nf | 8 ++---
modules/nf-core/multiqc/meta.yml | 26 +++++-----------
modules/nf-core/multiqc/multiqc.diff | 11 +------
.../nf-core/multiqc/tests/main.nf.test.snap | 30 +++++++++----------
6 files changed, 30 insertions(+), 49 deletions(-)
diff --git a/modules.json b/modules.json
index fe836420..3b24ee17 100644
--- a/modules.json
+++ b/modules.json
@@ -64,7 +64,7 @@
},
"multiqc": {
"branch": "master",
- "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
+ "git_sha": "9656d955b700a8707c4a67821ab056f8c1095675",
"installed_by": ["modules"],
"patch": "modules/nf-core/multiqc/multiqc.diff"
},
diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml
index d02016a0..009874d4 100644
--- a/modules/nf-core/multiqc/environment.yml
+++ b/modules/nf-core/multiqc/environment.yml
@@ -4,4 +4,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::multiqc=1.32
+ - bioconda::multiqc=1.33
diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf
index 1d691b15..25c2a503 100644
--- a/modules/nf-core/multiqc/main.nf
+++ b/modules/nf-core/multiqc/main.nf
@@ -4,8 +4,8 @@ process MULTIQC {
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/8c/8c6c120d559d7ee04c7442b61ad7cf5a9e8970be5feefb37d68eeaa60c1034eb/data' :
- 'community.wave.seqera.io/library/multiqc:1.32--d58f60e4deb769bf' }"
+ '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: "?/*")
@@ -19,7 +19,8 @@ process MULTIQC {
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_multiqc
+ tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions
+ // 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
when:
task.ext.when == null || task.ext.when
@@ -51,6 +52,5 @@ process MULTIQC {
touch multiqc_data/.stub
mkdir multiqc_plots
touch multiqc_report.html
-
"""
}
diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml
index 4a908611..e4b8f94d 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
@@ -28,8 +28,8 @@ input:
- 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.
+ 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
@@ -73,17 +73,6 @@ output:
description: Plots created by MultiQC
pattern: "*_data"
ontologies: []
- versions_multiqc:
- - - ${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: string
- description: The command used to generate the version of the tool
-topics:
versions:
- - ${task.process}:
type: string
@@ -91,9 +80,10 @@ topics:
- multiqc:
type: string
description: The tool name
- - multiqc --version | sed "s/.* //g:
- type: string
- description: The command used to generate the version of the tool
+ - multiqc --version | sed "s/.* //g":
+ type: eval
+ description: The expression to obtain the version of the tool
+
authors:
- "@abhi18av"
- "@bunop"
diff --git a/modules/nf-core/multiqc/multiqc.diff b/modules/nf-core/multiqc/multiqc.diff
index 73a5eb45..f0991afe 100644
--- a/modules/nf-core/multiqc/multiqc.diff
+++ b/modules/nf-core/multiqc/multiqc.diff
@@ -11,7 +11,7 @@ Changes in 'multiqc/main.nf':
conda "${moduleDir}/environment.yml"
@@ -7,7 +8,7 @@
- 'community.wave.seqera.io/library/multiqc:1.32--d58f60e4deb769bf' }"
+ 'community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b' }"
input:
- path multiqc_files, stageAs: "?/*"
@@ -19,15 +19,6 @@ Changes in 'multiqc/main.nf':
path(multiqc_config)
path(extra_multiqc_config)
path(multiqc_logo)
-@@ -18,7 +19,7 @@
- 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"'), topic: versions, emit: versions_multiqc
-+ tuple val("${task.process}"), val('multiqc'), eval('multiqc --version | sed "s/.* //g"'), emit: versions_multiqc
-
- when:
- task.ext.when == null || task.ext.when
'modules/nf-core/multiqc/tests/main.nf.test.snap' is unchanged
'modules/nf-core/multiqc/tests/nextflow.config' is unchanged
diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap
index f76049d3..d72d35b7 100644
--- a/modules/nf-core/multiqc/tests/main.nf.test.snap
+++ b/modules/nf-core/multiqc/tests/main.nf.test.snap
@@ -2,20 +2,20 @@
"sarscov2 single-end [fastqc]": {
"content": [
{
- "versions_multiqc": [
+ "versions": [
[
"MULTIQC",
"multiqc",
- "1.32"
+ "1.33"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-10-28T15:27:59.813370216"
+ "timestamp": "2025-12-09T10:10:43.020315838"
},
"sarscov2 single-end [fastqc] - stub": {
"content": [
@@ -24,38 +24,38 @@
"multiqc_data",
"multiqc_plots",
{
- "versions_multiqc": [
+ "versions": [
[
"MULTIQC",
"multiqc",
- "1.32"
+ "1.33"
]
]
}
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-10-28T15:30:48.963962021"
+ "timestamp": "2025-12-09T10:11:14.131950776"
},
"sarscov2 single-end [fastqc] [config]": {
"content": [
{
- "versions_multiqc": [
+ "versions": [
[
"MULTIQC",
"multiqc",
- "1.32"
+ "1.33"
]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-10-28T15:29:30.664969334"
+ "timestamp": "2025-12-09T10:11:07.15692209"
}
}
\ No newline at end of file
From f9104c13b62c84734abd56f6597a5fe3dc1f7ecd Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 11 Dec 2025 13:12:58 +0100
Subject: [PATCH 115/228] gcp: set default time to 24h
---
conf/profiles/gcp.config | 1 +
1 file changed, 1 insertion(+)
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 1d3b072d..577dd18d 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -3,6 +3,7 @@
process {
executor = 'google-batch'
disk = 100.GB
+ time = 24.h
errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
maxRetries = 5
From 45df61cce3d3864d46ec653d09af074764bd332f Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 12 Dec 2025 16:36:53 +0100
Subject: [PATCH 116/228] increase samtools verbosity
---
conf/modules.config | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/conf/modules.config b/conf/modules.config
index 7cd68402..2fc9ba9e 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -160,8 +160,13 @@ process {
cpus = 16
memory = 64.GB
ext.prefix = { "${meta.id}.merged" }
+ ext.args = "--verbosity 5"
+ ext.args2 = "--verbosity 5"
+ ext.args3 = "--verbosity 5"
+ ext.args4 = "--verbosity 5"
ext.args5 = {
[
+ "--verbosity 5",
"-s",
"--json",
"-d 2500",
From b0fa8989ea9aec02fd6f883271d074a93154e9c8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 12 Dec 2025 16:38:03 +0100
Subject: [PATCH 117/228] patch sormadup
---
modules/nf-core/samtools/sormadup/main.nf | 1 -
modules/nf-core/samtools/sormadup/samtools-sormadup.diff | 8 ++++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/modules/nf-core/samtools/sormadup/main.nf b/modules/nf-core/samtools/sormadup/main.nf
index 25541ed8..9bc8a43b 100644
--- a/modules/nf-core/samtools/sormadup/main.nf
+++ b/modules/nf-core/samtools/sormadup/main.nf
@@ -63,7 +63,6 @@ process SAMTOOLS_SORMADUP {
-u \\
-T ${prefix}.sort \\
--threads $task.cpus \\
- -m ${sort_memory}M \\
- \\
| \\
samtools markdup \\
diff --git a/modules/nf-core/samtools/sormadup/samtools-sormadup.diff b/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
index f614f937..1e13bac8 100644
--- a/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
+++ b/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
@@ -14,6 +14,14 @@ Changes in 'samtools/sormadup/main.nf':
output:
tuple val(meta), path("*.bam") , emit: bam, optional: true
+@@ -64,7 +63,6 @@
+ -u \\
+ -T ${prefix}.sort \\
+ --threads $task.cpus \\
+- -m ${sort_memory}M \\
+ - \\
+ | \\
+ samtools markdup \\
'modules/nf-core/samtools/sormadup/tests/main.nf.test.snap' is unchanged
'modules/nf-core/samtools/sormadup/tests/bam.config' is unchanged
From 44b94211b03010b3c357ad11c4a1c2d457ef61dd Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 16 Dec 2025 14:53:38 +0100
Subject: [PATCH 118/228] rna: make sure the correct index is used
---
subworkflows/local/fastq_to_aligned_cram/main.nf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index c00f4d75..09c4cec8 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -38,7 +38,7 @@ workflow FASTQ_TO_CRAM {
ch_meta_reads_aligner_index_fasta_gtf
.branch { meta, reads, aligner, index, fasta, gtf ->
rna: meta.sample_type == "RNA"
- return [meta, reads, "star", index, gtf]
+ return [meta, reads, "star", getGenomeAttribute(meta.genome_data, 'star'), gtf]
dna: meta.sample_type == "DNA" || meta.sample_type == "Tissue"
return [meta, reads, aligner, index, fasta]
}
From adfc3f08651106abec3c5f9177195b60a6246835 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 13:33:48 +0100
Subject: [PATCH 119/228] add splice junctions and junctions to rna output
---
conf/modules.config | 17 ++
main.nf | 10 +
modules.json | 10 +
modules/nf-core/cat/cat/environment.yml | 7 +
modules/nf-core/cat/cat/main.nf | 78 +++++
modules/nf-core/cat/cat/meta.yml | 63 ++++
modules/nf-core/cat/cat/tests/main.nf.test | 192 ++++++++++++
.../nf-core/cat/cat/tests/main.nf.test.snap | 283 ++++++++++++++++++
modules/nf-core/cat/cat/tests/nextflow.config | 6 +
modules/nf-core/gnu/sort/environment.yml | 7 +
modules/nf-core/gnu/sort/main.nf | 48 +++
modules/nf-core/gnu/sort/meta.yml | 55 ++++
modules/nf-core/gnu/sort/tests/main.nf.test | 120 ++++++++
.../nf-core/gnu/sort/tests/main.nf.test.snap | 164 ++++++++++
.../gnu/sort/tests/sort_complex.config | 6 +
.../gnu/sort/tests/sort_simple_bed.config | 6 +
.../gnu/sort/tests/sort_simple_genome.config | 6 +
subworkflows/local/fastq_align_rna/main.nf | 56 +++-
.../local/fastq_to_aligned_cram/main.nf | 10 +-
tests/default.nf.test | 16 +
tests/inputs/fastq_rna.yml | 20 ++
workflows/preprocessing.nf | 2 +
22 files changed, 1174 insertions(+), 8 deletions(-)
create mode 100644 modules/nf-core/cat/cat/environment.yml
create mode 100644 modules/nf-core/cat/cat/main.nf
create mode 100644 modules/nf-core/cat/cat/meta.yml
create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test
create mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap
create mode 100644 modules/nf-core/cat/cat/tests/nextflow.config
create mode 100644 modules/nf-core/gnu/sort/environment.yml
create mode 100644 modules/nf-core/gnu/sort/main.nf
create mode 100644 modules/nf-core/gnu/sort/meta.yml
create mode 100644 modules/nf-core/gnu/sort/tests/main.nf.test
create mode 100644 modules/nf-core/gnu/sort/tests/main.nf.test.snap
create mode 100644 modules/nf-core/gnu/sort/tests/sort_complex.config
create mode 100644 modules/nf-core/gnu/sort/tests/sort_simple_bed.config
create mode 100644 modules/nf-core/gnu/sort/tests/sort_simple_genome.config
create mode 100644 tests/inputs/fastq_rna.yml
diff --git a/conf/modules.config b/conf/modules.config
index 2fc9ba9e..d5364955 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -154,6 +154,23 @@ process {
}
}
+ withName: '.*FASTQ_ALIGN_RNA:CAT_SPLICE_JUNCTIONS' {
+ ext.prefix = { "${meta.id}.unsorted.Sj.out.tab" }
+ }
+
+ withName: '.*FASTQ_ALIGN_RNA:CAT_JUNCTIONS' {
+ ext.prefix = { "${meta.id}.unsorted.Chimeric.out.junction" }
+ }
+
+ withName: '.*FASTQ_ALIGN_RNA:SORT_SPLICE_JUNCTIONS' {
+ ext.prefix = { "${meta.id}.Sj.out" }
+ ext.args = '-k1,1n -k2,2n -k3,3n'
+ }
+
+ withName: '.*FASTQ_ALIGN_RNA:SORT_JUNCTIONS' {
+ ext.prefix = { "${meta.id}.Chimeric.out" }
+ ext.args = '-k1,1n -k2,2n -k4,4n -k5,5n'
+ }
//// Samtools sormadup
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
diff --git a/main.nf b/main.nf
index 9c2b4a22..03dfac1a 100644
--- a/main.nf
+++ b/main.nf
@@ -71,6 +71,8 @@ workflow {
fastp_json = PREPROCESSING.out.fastp_json
fastp_html = PREPROCESSING.out.fastp_html
crams = PREPROCESSING.out.crams
+ rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
+ rna_junctions = PREPROCESSING.out.rna_junctions
align_reports = PREPROCESSING.out.align_reports
sormadup_metrics = PREPROCESSING.out.sormadup_metrics
mosdepth_global = PREPROCESSING.out.mosdepth_global
@@ -133,6 +135,14 @@ output {
cram >> out_cram
crai >> out_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
+ } }
+ 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
+ } }
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
diff --git a/modules.json b/modules.json
index 3b24ee17..8e111c49 100644
--- a/modules.json
+++ b/modules.json
@@ -40,6 +40,11 @@
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff"
},
+ "cat/cat": {
+ "branch": "master",
+ "git_sha": "69614d4579a6bd9b8a2ecffb35959809d9c36559",
+ "installed_by": ["modules"]
+ },
"dragmap/align": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
@@ -51,6 +56,11 @@
"git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
"installed_by": ["modules"]
},
+ "gnu/sort": {
+ "branch": "master",
+ "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "installed_by": ["modules"]
+ },
"md5sum": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml
new file mode 100644
index 00000000..98511769
--- /dev/null
+++ b/modules/nf-core/cat/cat/environment.yml
@@ -0,0 +1,7 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
+channels:
+ - conda-forge
+ - bioconda
+dependencies:
+ - conda-forge::pigz=2.8
diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf
new file mode 100644
index 00000000..aa72fc4d
--- /dev/null
+++ b/modules/nf-core/cat/cat/main.nf
@@ -0,0 +1,78 @@
+process CAT_CAT {
+ tag "$meta.id"
+ label 'process_low'
+
+ conda "${moduleDir}/environment.yml"
+ container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+ 'https://depot.galaxyproject.org/singularity/pigz:2.8' :
+ 'biocontainers/pigz:2.8' }"
+
+ input:
+ tuple val(meta), path(files_in)
+
+ output:
+ tuple val(meta), path("${prefix}"), emit: file_out
+ tuple val("${task.process}"), val("pigz"), eval("pigz --version 2>&1 | sed 's/pigz //g'"), topic: versions, emit: versions_cat
+
+ when:
+ task.ext.when == null || task.ext.when
+
+ script:
+ def args = task.ext.args ?: ''
+ def args2 = task.ext.args2 ?: ''
+ def file_list = files_in.collect { it.toString() }
+
+ // choose appropriate concatenation tool depending on input and output format
+
+ // | input | output | command1 | command2 |
+ // |-----------|------------|----------|----------|
+ // | gzipped | gzipped | cat | |
+ // | ungzipped | ungzipped | cat | |
+ // | gzipped | ungzipped | zcat | |
+ // | ungzipped | gzipped | cat | pigz |
+
+ // Use input file ending as default
+ prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}"
+ out_zip = prefix.endsWith('.gz')
+ in_zip = file_list[0].endsWith('.gz')
+ command1 = (in_zip && !out_zip) ? 'zcat' : 'cat'
+ command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : ''
+ if(file_list.contains(prefix.trim())) {
+ error "The name of the input file can't be the same as for the output prefix in the " +
+ "module CAT_CAT (currently `$prefix`). Please choose a different one."
+ }
+ """
+ $command1 \\
+ $args \\
+ ${file_list.join(' ')} \\
+ $command2 \\
+ > ${prefix}
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
+ END_VERSIONS
+ """
+
+ stub:
+ def file_list = files_in.collect { it.toString() }
+ prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}"
+ if(file_list.contains(prefix.trim())) {
+ error "The name of the input file can't be the same as for the output prefix in the " +
+ "module CAT_CAT (currently `$prefix`). Please choose a different one."
+ }
+ """
+ touch $prefix
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
+ END_VERSIONS
+ """
+}
+
+// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz
+def getFileSuffix(filename) {
+ def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/
+ return match ? match[0][1] : filename.substring(filename.lastIndexOf('.'))
+}
diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml
new file mode 100644
index 00000000..36a7359b
--- /dev/null
+++ b/modules/nf-core/cat/cat/meta.yml
@@ -0,0 +1,63 @@
+name: cat_cat
+description: A module for concatenation of gzipped or uncompressed files
+keywords:
+ - concatenate
+ - gzip
+ - cat
+tools:
+ - cat:
+ description: Just concatenation
+ documentation: https://man7.org/linux/man-pages/man1/cat.1.html
+ licence: ["GPL-3.0-or-later"]
+ identifier: ""
+input:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - files_in:
+ type: file
+ description: List of compressed / uncompressed files
+ pattern: "*"
+ ontologies: []
+output:
+ file_out:
+ - - meta:
+ type: map
+ description: Groovy Map containing sample information
+ - ${prefix}:
+ type: file
+ description: Concatenated file. Will be gzipped if file_out ends with
+ ".gz"
+ pattern: "${file_out}"
+ ontologies: []
+ versions_cat:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - "pigz --version 2>&1 | sed 's/pigz //g'":
+ type: eval
+ description: The expression to obtain the version of the tool
+
+topics:
+ versions:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - "pigz --version 2>&1 | sed 's/pigz //g'":
+ type: eval
+ description: The expression to obtain the version of the tool
+
+authors:
+ - "@erikrikarddaniel"
+ - "@FriederikeHanssen"
+maintainers:
+ - "@erikrikarddaniel"
+ - "@FriederikeHanssen"
diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test
new file mode 100644
index 00000000..030c6649
--- /dev/null
+++ b/modules/nf-core/cat/cat/tests/main.nf.test
@@ -0,0 +1,192 @@
+nextflow_process {
+
+ name "Test Process CAT_CAT"
+ script "../main.nf"
+ process "CAT_CAT"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "cat"
+ tag "cat/cat"
+
+ test("sarscov2 - genome - error: name conflict") {
+ when {
+ process {
+ """
+ input[0] =
+ [
+ [ id:'genome', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+ then {
+ assertAll(
+ { assert !process.success },
+ { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("sarscov2 - [ fasta, sizes ] - unzipped") {
+ when {
+ process {
+ """
+ input[0] =
+ [
+ [ id:'test', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+
+ test("sarscov2 - [ gff3_gz, maf_gz ] - zipped") {
+ when {
+ process {
+ """
+ input[0] =
+ [
+ [ id:'test', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match()
+ }
+ )
+ }
+ }
+
+ test("sarscov2 - [ gff3_gz, maf_gz ] - unzipped") {
+ config './nextflow.config'
+
+ when {
+ params {
+ cat_prefix = "cat.txt"
+ }
+ process {
+ """
+ input[0] =
+ [
+ [ id:'test', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+
+ }
+
+ test("sarscov2 - [ fasta, sizes ] - zipped") {
+ config './nextflow.config'
+
+ when {
+ params {
+ cat_prefix = "cat.txt.gz"
+ }
+ process {
+ """
+ input[0] =
+ [
+ [ id:'test', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("sarscov2 - fasta - zipped") {
+ config './nextflow.config'
+
+ when {
+ params {
+ cat_prefix = "cat.txt.gz"
+ }
+ process {
+ """
+ input[0] =
+ [
+ [ id:'test', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
+ test("sarscov2 - fasta - unzipped - stub") {
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] =
+ [
+ [ id:'test', single_end:true ],
+ [
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
+ ]
+ ]
+ """
+ }
+ }
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+}
diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap
new file mode 100644
index 00000000..5b4e4cc3
--- /dev/null
+++ b/modules/nf-core/cat/cat/tests/main.nf.test.snap
@@ -0,0 +1,283 @@
+{
+ "sarscov2 - [ gff3_gz, maf_gz ] - unzipped": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
+ ]
+ ],
+ "1": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "file_out": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
+ ]
+ ],
+ "versions_cat": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T09:08:31.479828"
+ },
+ "sarscov2 - fasta - unzipped - stub": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "1": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "file_out": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_cat": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T16:16:28.118094"
+ },
+ "sarscov2 - [ fasta, sizes ] - zipped": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2"
+ ]
+ ],
+ "1": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "file_out": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2"
+ ]
+ ],
+ "versions_cat": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T16:15:56.529595"
+ },
+ "sarscov2 - genome - error: name conflict": {
+ "content": [
+ {
+ "0": [
+
+ ],
+ "1": [
+
+ ],
+ "file_out": [
+
+ ],
+ "versions_cat": [
+
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T16:14:54.496538"
+ },
+ "sarscov2 - [ fasta, sizes ] - unzipped": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2"
+ ]
+ ],
+ "1": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "file_out": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2"
+ ]
+ ],
+ "versions_cat": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T11:26:29.942203"
+ },
+ "sarscov2 - [ gff3_gz, maf_gz ] - zipped": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
+ ]
+ ],
+ "1": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "file_out": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
+ ]
+ ],
+ "versions_cat": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T11:26:45.679401"
+ },
+ "sarscov2 - fasta - zipped": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "cat.txt.gz:md5,6e9fe4042a72f2345f644f239272b7e6"
+ ]
+ ],
+ "1": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "file_out": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "cat.txt.gz:md5,6e9fe4042a72f2345f644f239272b7e6"
+ ]
+ ],
+ "versions_cat": [
+ [
+ "CAT_CAT",
+ "pigz",
+ "2.8"
+ ]
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
+ },
+ "timestamp": "2025-12-10T16:16:12.439911"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/cat/cat/tests/nextflow.config b/modules/nf-core/cat/cat/tests/nextflow.config
new file mode 100644
index 00000000..5bc9bf50
--- /dev/null
+++ b/modules/nf-core/cat/cat/tests/nextflow.config
@@ -0,0 +1,6 @@
+
+process {
+ withName: CAT_CAT {
+ ext.prefix = "${params.cat_prefix}"
+ }
+}
diff --git a/modules/nf-core/gnu/sort/environment.yml b/modules/nf-core/gnu/sort/environment.yml
new file mode 100644
index 00000000..0c4cd942
--- /dev/null
+++ b/modules/nf-core/gnu/sort/environment.yml
@@ -0,0 +1,7 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
+channels:
+ - conda-forge
+ - bioconda
+dependencies:
+ - conda-forge::coreutils=9.5
diff --git a/modules/nf-core/gnu/sort/main.nf b/modules/nf-core/gnu/sort/main.nf
new file mode 100644
index 00000000..6190210d
--- /dev/null
+++ b/modules/nf-core/gnu/sort/main.nf
@@ -0,0 +1,48 @@
+process GNU_SORT {
+ tag "$meta.id"
+ label "process_low"
+
+ conda "${moduleDir}/environment.yml"
+ container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+ 'https://depot.galaxyproject.org/singularity/coreutils:9.5':
+ 'biocontainers/coreutils:9.5' }"
+
+ input:
+ tuple val(meta), path(input)
+
+ output:
+ tuple val(meta), path( "${output_file}" ) , emit: sorted
+ path "versions.yml" , emit: versions
+
+ when:
+ task.ext.when == null || task.ext.when
+
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ suffix = task.ext.suffix ?: "${input.extension}"
+ output_file = "${prefix}.${suffix}"
+ if ("$input" == "$output_file") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+ """
+ sort ${args} ${input} > ${output_file}
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ coreutils: \$(sort --version |& sed '1!d ; s/sort (GNU coreutils) //')
+ END_VERSIONS
+ """
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ suffix = task.ext.suffix ?: "${input.extension}"
+ output_file = "${prefix}.${suffix}"
+ if ("$input" == "$output_file") error "Input and output names are the same, use \"task.ext.prefix\" to disambiguate!"
+ """
+ touch ${output_file}
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ coreutils: \$(sort --version |& sed '1!d ; s/sort (GNU coreutils) //')
+ END_VERSIONS
+ """
+}
diff --git a/modules/nf-core/gnu/sort/meta.yml b/modules/nf-core/gnu/sort/meta.yml
new file mode 100644
index 00000000..feba2c1f
--- /dev/null
+++ b/modules/nf-core/gnu/sort/meta.yml
@@ -0,0 +1,55 @@
+name: "gnu_sort"
+description: |
+ Writes a sorted concatenation of file/s
+keywords:
+ - GNU
+ - coreutils
+ - sort
+ - merge compare
+tools:
+ - gnu:
+ description: "The GNU Core Utilities are the basic file, shell and text manipulation
+ utilities of the GNU operating system. These are the core utilities which are
+ expected to exist on every operating system."
+ homepage: "https://www.gnu.org/software/coreutils/"
+ documentation: "https://www.gnu.org/software/coreutils/manual/html_node/index.html"
+ tool_dev_url: "https://git.savannah.gnu.org/cgit/coreutils.git"
+ doi: "10.5281/zenodo.581670"
+ licence: ["GPL"]
+ identifier: ""
+input:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - input:
+ type: file
+ description: Draft assembly file
+ pattern: "*.{txt,bed,interval,genome,bins}"
+ ontologies: []
+output:
+ sorted:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ pattern: "${output_file}"
+ - "${output_file}":
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ pattern: "${output_file}"
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
+authors:
+ - "@DLBPointon"
+maintainers:
+ - "@DLBPointon"
diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test b/modules/nf-core/gnu/sort/tests/main.nf.test
new file mode 100644
index 00000000..e4030187
--- /dev/null
+++ b/modules/nf-core/gnu/sort/tests/main.nf.test
@@ -0,0 +1,120 @@
+nextflow_process {
+
+ name "Test Process GNU_SORT"
+ script "modules/nf-core/gnu/sort/main.nf"
+ process "GNU_SORT"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "gnu"
+ tag "gnu/sort"
+
+ test("unsorted_genome_sort") {
+ config "./sort_simple_bed.config"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id:'genome_test'],
+ file(params.test_data['generic']['unsorted_data']['unsorted_text']['genome_file'],
+ checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out).match() },
+ { assert snapshot(
+ file(process.out.sorted[0][1]).name
+ ).match("genome_sort")
+ }
+ )
+ }
+
+ }
+
+ test("unsorted_intervals_sort") {
+ config "./sort_simple_bed.config"
+ when {
+ process {
+ """
+ input[0] = [
+ [id:'test'],
+ file(params.test_data['generic']['unsorted_data']['unsorted_text']['intervals'],
+ checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out).match() },
+ { assert snapshot(
+ file(process.out.sorted[0][1]).name
+ ).match("interval_sort")
+ }
+ )
+ }
+
+ }
+
+ test("unsorted_csv_sort") {
+ config "./sort_complex.config"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id:'test'],
+ file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'],
+ checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out).match() },
+ { assert snapshot(
+ file(process.out.sorted[0][1]).name
+ ).match("csv_sort")
+ }
+ )
+ }
+
+ }
+
+ test("unsorted_csv_sort_stub") {
+ config "./sort_complex.config"
+ options "-stub"
+
+ when {
+ process {
+ """
+ input[0] = [
+ [id:'test'],
+ file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'],
+ checkIfExists: true)
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll (
+ { assert process.success },
+ { assert snapshot(process.out).match() },
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test.snap b/modules/nf-core/gnu/sort/tests/main.nf.test.snap
new file mode 100644
index 00000000..20e17080
--- /dev/null
+++ b/modules/nf-core/gnu/sort/tests/main.nf.test.snap
@@ -0,0 +1,164 @@
+{
+ "unsorted_csv_sort": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ "test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ],
+ "sorted": [
+ [
+ {
+ "id": "test"
+ },
+ "test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:27:50.564838"
+ },
+ "interval_sort": {
+ "content": [
+ "test.bed.sorted"
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:27:34.740893"
+ },
+ "unsorted_csv_sort_stub": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ "test.csv.sorted:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ],
+ "sorted": [
+ [
+ {
+ "id": "test"
+ },
+ "test.csv.sorted:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:28:06.468116"
+ },
+ "csv_sort": {
+ "content": [
+ "test.csv.sorted"
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:27:50.596931"
+ },
+ "unsorted_genome_sort": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "genome_test"
+ },
+ "genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ],
+ "sorted": [
+ [
+ {
+ "id": "genome_test"
+ },
+ "genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:27:19.192354"
+ },
+ "genome_sort": {
+ "content": [
+ "genome_test.bed.sorted"
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:27:19.234221"
+ },
+ "unsorted_intervals_sort": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test"
+ },
+ "test.bed.sorted:md5,abbce903ef263d38b2f71856387799ab"
+ ]
+ ],
+ "1": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ],
+ "sorted": [
+ [
+ {
+ "id": "test"
+ },
+ "test.bed.sorted:md5,abbce903ef263d38b2f71856387799ab"
+ ]
+ ],
+ "versions": [
+ "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ ]
+ }
+ ],
+ "meta": {
+ "nf-test": "0.9.2",
+ "nextflow": "24.10.4"
+ },
+ "timestamp": "2025-04-30T14:27:34.711885"
+ }
+}
\ No newline at end of file
diff --git a/modules/nf-core/gnu/sort/tests/sort_complex.config b/modules/nf-core/gnu/sort/tests/sort_complex.config
new file mode 100644
index 00000000..ce4f1518
--- /dev/null
+++ b/modules/nf-core/gnu/sort/tests/sort_complex.config
@@ -0,0 +1,6 @@
+process {
+ withName: GNU_SORT {
+ ext.args = { "-t ';' -g -k 1,1 -k 2,2" }
+ ext.suffix = { "csv.sorted" }
+ }
+}
diff --git a/modules/nf-core/gnu/sort/tests/sort_simple_bed.config b/modules/nf-core/gnu/sort/tests/sort_simple_bed.config
new file mode 100644
index 00000000..8496c8d7
--- /dev/null
+++ b/modules/nf-core/gnu/sort/tests/sort_simple_bed.config
@@ -0,0 +1,6 @@
+process {
+ withName: GNU_SORT {
+ ext.args = { "-k1,1 -k2,2n" }
+ ext.suffix = { "bed.sorted" }
+ }
+}
diff --git a/modules/nf-core/gnu/sort/tests/sort_simple_genome.config b/modules/nf-core/gnu/sort/tests/sort_simple_genome.config
new file mode 100644
index 00000000..c408ece1
--- /dev/null
+++ b/modules/nf-core/gnu/sort/tests/sort_simple_genome.config
@@ -0,0 +1,6 @@
+process {
+ withName: GNU_SORT {
+ ext.args = { "-k1,1 -k2,2n" }
+ ext.suffix = { "genome.sorted" }
+ }
+}
diff --git a/subworkflows/local/fastq_align_rna/main.nf b/subworkflows/local/fastq_align_rna/main.nf
index 03b9c585..ed99fa48 100644
--- a/subworkflows/local/fastq_align_rna/main.nf
+++ b/subworkflows/local/fastq_align_rna/main.nf
@@ -5,7 +5,11 @@
//
-include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
+include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
+include { CAT_CAT as CAT_JUNCTIONS } from "../../../modules/nf-core/cat/cat/main.nf"
+include { CAT_CAT as CAT_SPLICE_JUNCTIONS } from "../../../modules/nf-core/cat/cat/main.nf"
+include { GNU_SORT as SORT_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { GNU_SORT as SORT_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
workflow FASTQ_ALIGN_RNA {
take:
@@ -40,8 +44,52 @@ workflow FASTQ_ALIGN_RNA {
)
ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first())
+ // Concatenate splice junction files
+ def ch_splice_junctions_to_merge = group_junctions(STAR_ALIGN.out.spl_junc_tab)
+
+ CAT_SPLICE_JUNCTIONS(ch_splice_junctions_to_merge)
+ SORT_SPLICE_JUNCTIONS(CAT_SPLICE_JUNCTIONS.out.file_out)
+ ch_versions = ch_versions.mix(SORT_SPLICE_JUNCTIONS.out.versions.first())
+
+ // Concatenate junction files
+ def ch_junctions_to_merge = group_junctions(STAR_ALIGN.out.junction)
+
+ CAT_JUNCTIONS(ch_junctions_to_merge)
+ SORT_JUNCTIONS(CAT_JUNCTIONS.out.file_out)
+ ch_versions = ch_versions.mix(SORT_JUNCTIONS.out.versions.first())
+
emit:
- bam = ch_bam // channel: [ [meta], bam ]
- reports = ch_reports // channel: [ [meta], log ]
- versions = ch_versions // channel: [ versions.yml ]
+ bam = ch_bam // channel: [ [meta], bam ]
+ splice_junctions = SORT_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
+ junctions = SORT_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
+ reports = ch_reports // channel: [ [meta], log ]
+ versions = ch_versions // channel: [ versions.yml ]
+}
+
+def group_junctions(ch) {
+ return ch.map { meta, files ->
+ def gk = (meta.chunks as Integer ?: 1)
+ return [
+ groupKey(
+ meta - meta.subMap('readgroup', 'chunks') + [id: meta.id ==~ /^\d{4}\..*$/ ? meta.id[5..-1] : meta.id],
+ gk,
+ ),
+ files,
+ ]
+ }
+ .groupTuple()
+ .map { meta, files ->
+ def gk = (meta.count as Integer ?: 1)
+ return [
+ groupKey(
+ meta - meta.subMap('count') + [id: meta.samplename ?: meta.id],
+ gk,
+ ),
+ files,
+ ]
+ }
+ .groupTuple()
+ .map { meta, files ->
+ return [meta, files.flatten()]
+ }
}
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index c00f4d75..8c0cf445 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -151,8 +151,10 @@ workflow FASTQ_TO_CRAM {
ch_cram_crai.dump(tag: "FASTQ_TO_CRAM: cram and crai", pretty: true)
emit:
- cram_crai = ch_cram_crai
- sormadup_metrics = ch_sormadup_metrics
- align_reports = FASTQ_ALIGN_DNA.out.reports
- versions = ch_versions
+ cram_crai = ch_cram_crai
+ rna_splice_junctions = FASTQ_ALIGN_RNA.out.splice_junctions
+ rna_junctions = FASTQ_ALIGN_RNA.out.junctions
+ sormadup_metrics = ch_sormadup_metrics
+ align_reports = FASTQ_ALIGN_DNA.out.reports
+ versions = ch_versions
}
diff --git a/tests/default.nf.test b/tests/default.nf.test
index ba9b69e3..66a790d4 100644
--- a/tests/default.nf.test
+++ b/tests/default.nf.test
@@ -39,4 +39,20 @@ nextflow_pipeline {
}
+ test("main - fastq RNA input") {
+
+ when {
+ params {
+ input = "${projectDir}/tests/inputs/fastq_rna.yml"
+ igenomes_base = "s3://reference-data/genomes"
+ outdir = "$outputDir"
+ }
+ }
+
+ then {
+ assert workflow.success
+ }
+
+ }
+
}
diff --git a/tests/inputs/fastq_rna.yml b/tests/inputs/fastq_rna.yml
new file mode 100644
index 00000000..878dab22
--- /dev/null
+++ b/tests/inputs/fastq_rna.yml
@@ -0,0 +1,20 @@
+---
+# fastq inputs
+- id: sample1_L001
+ samplename: fastq_paired1
+ library: test_library
+ organism: Homo sapiens
+ tag: WES
+ sample_type: RNA
+ aligner: star
+ 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
+ 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/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 292b5b49..9149e445 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -488,6 +488,8 @@ workflow PREPROCESSING {
fastp_json = FASTP.out.json
fastp_html = FASTP.out.html
crams = FASTQ_TO_CRAM.out.cram_crai
+ rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
+ rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
align_reports = FASTQ_TO_CRAM.out.align_reports
sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
mosdepth_global = mosdepth_global_out
From cf107cf1f34e9f6bb0c939f146ebdfb47b20dbf3 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 13:35:09 +0100
Subject: [PATCH 120/228] changelog
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2648d1d9..def4121f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
- Drop support for global `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
- Simplify fastq sharding and make it user configurable via the `split_fastq` parameter.
+- Added splice junctions and junctions outputs for RNA-seq alignments using STAR.
## v2.0.6
From 4bf8735b9ce7ad108397eb66c84861d3e47a72b2 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 14:11:18 +0100
Subject: [PATCH 121/228] merge with the sort module
---
conf/modules.config | 18 +-
modules.json | 131 +++++---
modules/nf-core/cat/cat/environment.yml | 7 -
modules/nf-core/cat/cat/main.nf | 78 -----
modules/nf-core/cat/cat/meta.yml | 63 ----
modules/nf-core/cat/cat/tests/main.nf.test | 192 ------------
.../nf-core/cat/cat/tests/main.nf.test.snap | 283 ------------------
modules/nf-core/cat/cat/tests/nextflow.config | 6 -
subworkflows/local/fastq_align_rna/main.nf | 22 +-
9 files changed, 110 insertions(+), 690 deletions(-)
delete mode 100644 modules/nf-core/cat/cat/environment.yml
delete mode 100644 modules/nf-core/cat/cat/main.nf
delete mode 100644 modules/nf-core/cat/cat/meta.yml
delete mode 100644 modules/nf-core/cat/cat/tests/main.nf.test
delete mode 100644 modules/nf-core/cat/cat/tests/main.nf.test.snap
delete mode 100644 modules/nf-core/cat/cat/tests/nextflow.config
diff --git a/conf/modules.config b/conf/modules.config
index d5364955..9aa74e0e 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -154,22 +154,16 @@ process {
}
}
- withName: '.*FASTQ_ALIGN_RNA:CAT_SPLICE_JUNCTIONS' {
- ext.prefix = { "${meta.id}.unsorted.Sj.out.tab" }
- }
-
- withName: '.*FASTQ_ALIGN_RNA:CAT_JUNCTIONS' {
- ext.prefix = { "${meta.id}.unsorted.Chimeric.out.junction" }
- }
-
- withName: '.*FASTQ_ALIGN_RNA:SORT_SPLICE_JUNCTIONS' {
+ withName: '.*FASTQ_ALIGN_RNA:SORT_MERGE_SPLICE_JUNCTIONS' {
ext.prefix = { "${meta.id}.Sj.out" }
- ext.args = '-k1,1n -k2,2n -k3,3n'
+ ext.suffix = "tab"
+ ext.args = '-k1,1n -k2,2n -k3,3n --merge'
}
- withName: '.*FASTQ_ALIGN_RNA:SORT_JUNCTIONS' {
+ withName: '.*FASTQ_ALIGN_RNA:SORT_MERGE_JUNCTIONS' {
ext.prefix = { "${meta.id}.Chimeric.out" }
- ext.args = '-k1,1n -k2,2n -k4,4n -k5,5n'
+ ext.suffix = "junction"
+ ext.args = '-k1,1n -k2,2n -k4,4n -k5,5n --merge'
}
//// Samtools sormadup
diff --git a/modules.json b/modules.json
index 8e111c49..c83142f7 100644
--- a/modules.json
+++ b/modules.json
@@ -8,150 +8,199 @@
"bcl2fastq": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["bcl_demultiplex"]
+ "installed_by": [
+ "bcl_demultiplex"
+ ]
},
"bclconvert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["bcl_demultiplex", "modules"],
+ "installed_by": [
+ "bcl_demultiplex",
+ "modules"
+ ],
"patch": "modules/nf-core/bclconvert/bclconvert.diff"
},
"biobambam/bamsormadup": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff"
},
"bowtie2/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["fastq_align_dna", "modules"],
+ "installed_by": [
+ "fastq_align_dna",
+ "modules"
+ ],
"patch": "modules/nf-core/bowtie2/align/bowtie2-align.diff"
},
"bwa/mem": {
"branch": "master",
"git_sha": "1c46359c837ef768b004519f535c30378e8289fc",
- "installed_by": ["fastq_align_dna"],
+ "installed_by": [
+ "fastq_align_dna"
+ ],
"patch": "modules/nf-core/bwa/mem/bwa-mem.diff"
},
"bwamem2/mem": {
"branch": "master",
"git_sha": "d86336f3e7ae0d5f76c67b0859409769cfeb2af2",
- "installed_by": ["fastq_align_dna"],
+ "installed_by": [
+ "fastq_align_dna"
+ ],
"patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff"
},
- "cat/cat": {
- "branch": "master",
- "git_sha": "69614d4579a6bd9b8a2ecffb35959809d9c36559",
- "installed_by": ["modules"]
- },
"dragmap/align": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": ["fastq_align_dna"],
+ "installed_by": [
+ "fastq_align_dna"
+ ],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
"fastp": {
"branch": "master",
"git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"gnu/sort": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"md5sum": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"mosdepth": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/mosdepth/mosdepth.diff"
},
"multiqc": {
"branch": "master",
"git_sha": "9656d955b700a8707c4a67821ab056f8c1095675",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/multiqc/multiqc.diff"
},
"picard/collecthsmetrics": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff"
},
"picard/collectmultiplemetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff"
},
"picard/collectwgsmetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
"samtools/convert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/convert/samtools-convert.diff"
},
"samtools/coverage": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
"samtools/flagstat": {
"branch": "master",
"git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"samtools/idxstats": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"]
+ "installed_by": [
+ "modules"
+ ]
},
"samtools/sormadup": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/sormadup/samtools-sormadup.diff"
},
"samtools/sort": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/sort/samtools-sort.diff"
},
"samtools/stats": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/samtools/stats/samtools-stats.diff"
},
"snapaligner/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["fastq_align_dna", "modules"],
+ "installed_by": [
+ "fastq_align_dna",
+ "modules"
+ ],
"patch": "modules/nf-core/snapaligner/align/snapaligner-align.diff"
},
"star/align": {
"branch": "master",
"git_sha": "ce9e10540a1555145ddd1ddd8b15f7443cbe1449",
- "installed_by": ["modules"],
+ "installed_by": [
+ "modules"
+ ],
"patch": "modules/nf-core/star/align/star-align.diff"
},
"strobealign": {
"branch": "master",
"git_sha": "d5cc72b63c4e1565cb66e83f0577b04c0bb54d5c",
- "installed_by": ["fastq_align_dna", "modules"],
+ "installed_by": [
+ "fastq_align_dna",
+ "modules"
+ ],
"patch": "modules/nf-core/strobealign/strobealign.diff"
}
}
@@ -161,30 +210,40 @@
"bcl_demultiplex": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"fastq_align_dna": {
"branch": "master",
"git_sha": "070ddae7fb59384d3d85bf69eb9a1d71ab33ada9",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"utils_nextflow_pipeline": {
"branch": "master",
"git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"utils_nfcore_pipeline": {
"branch": "master",
"git_sha": "df4d1c8cdee98a1bbbed8fc51e82296568e0f9c1",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
},
"utils_nfschema_plugin": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["subworkflows"]
+ "installed_by": [
+ "subworkflows"
+ ]
}
}
}
}
}
-}
+}
\ No newline at end of file
diff --git a/modules/nf-core/cat/cat/environment.yml b/modules/nf-core/cat/cat/environment.yml
deleted file mode 100644
index 98511769..00000000
--- a/modules/nf-core/cat/cat/environment.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
-channels:
- - conda-forge
- - bioconda
-dependencies:
- - conda-forge::pigz=2.8
diff --git a/modules/nf-core/cat/cat/main.nf b/modules/nf-core/cat/cat/main.nf
deleted file mode 100644
index aa72fc4d..00000000
--- a/modules/nf-core/cat/cat/main.nf
+++ /dev/null
@@ -1,78 +0,0 @@
-process CAT_CAT {
- tag "$meta.id"
- label 'process_low'
-
- conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/pigz:2.8' :
- 'biocontainers/pigz:2.8' }"
-
- input:
- tuple val(meta), path(files_in)
-
- output:
- tuple val(meta), path("${prefix}"), emit: file_out
- tuple val("${task.process}"), val("pigz"), eval("pigz --version 2>&1 | sed 's/pigz //g'"), topic: versions, emit: versions_cat
-
- when:
- task.ext.when == null || task.ext.when
-
- script:
- def args = task.ext.args ?: ''
- def args2 = task.ext.args2 ?: ''
- def file_list = files_in.collect { it.toString() }
-
- // choose appropriate concatenation tool depending on input and output format
-
- // | input | output | command1 | command2 |
- // |-----------|------------|----------|----------|
- // | gzipped | gzipped | cat | |
- // | ungzipped | ungzipped | cat | |
- // | gzipped | ungzipped | zcat | |
- // | ungzipped | gzipped | cat | pigz |
-
- // Use input file ending as default
- prefix = task.ext.prefix ?: "${meta.id}${getFileSuffix(file_list[0])}"
- out_zip = prefix.endsWith('.gz')
- in_zip = file_list[0].endsWith('.gz')
- command1 = (in_zip && !out_zip) ? 'zcat' : 'cat'
- command2 = (!in_zip && out_zip) ? "| pigz -c -p $task.cpus $args2" : ''
- if(file_list.contains(prefix.trim())) {
- error "The name of the input file can't be the same as for the output prefix in the " +
- "module CAT_CAT (currently `$prefix`). Please choose a different one."
- }
- """
- $command1 \\
- $args \\
- ${file_list.join(' ')} \\
- $command2 \\
- > ${prefix}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
- """
-
- stub:
- def file_list = files_in.collect { it.toString() }
- prefix = task.ext.prefix ?: "${meta.id}${file_list[0].substring(file_list[0].lastIndexOf('.'))}"
- if(file_list.contains(prefix.trim())) {
- error "The name of the input file can't be the same as for the output prefix in the " +
- "module CAT_CAT (currently `$prefix`). Please choose a different one."
- }
- """
- touch $prefix
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
- """
-}
-
-// for .gz files also include the second to last extension if it is present. E.g., .fasta.gz
-def getFileSuffix(filename) {
- def match = filename =~ /^.*?((\.\w{1,5})?(\.\w{1,5}\.gz$))/
- return match ? match[0][1] : filename.substring(filename.lastIndexOf('.'))
-}
diff --git a/modules/nf-core/cat/cat/meta.yml b/modules/nf-core/cat/cat/meta.yml
deleted file mode 100644
index 36a7359b..00000000
--- a/modules/nf-core/cat/cat/meta.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-name: cat_cat
-description: A module for concatenation of gzipped or uncompressed files
-keywords:
- - concatenate
- - gzip
- - cat
-tools:
- - cat:
- description: Just concatenation
- documentation: https://man7.org/linux/man-pages/man1/cat.1.html
- licence: ["GPL-3.0-or-later"]
- identifier: ""
-input:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - files_in:
- type: file
- description: List of compressed / uncompressed files
- pattern: "*"
- ontologies: []
-output:
- file_out:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - ${prefix}:
- type: file
- description: Concatenated file. Will be gzipped if file_out ends with
- ".gz"
- pattern: "${file_out}"
- ontologies: []
- versions_cat:
- - - ${task.process}:
- type: string
- description: The name of the process
- - pigz:
- type: string
- description: The name of the tool
- - "pigz --version 2>&1 | sed 's/pigz //g'":
- type: eval
- description: The expression to obtain the version of the tool
-
-topics:
- versions:
- - - ${task.process}:
- type: string
- description: The name of the process
- - pigz:
- type: string
- description: The name of the tool
- - "pigz --version 2>&1 | sed 's/pigz //g'":
- type: eval
- description: The expression to obtain the version of the tool
-
-authors:
- - "@erikrikarddaniel"
- - "@FriederikeHanssen"
-maintainers:
- - "@erikrikarddaniel"
- - "@FriederikeHanssen"
diff --git a/modules/nf-core/cat/cat/tests/main.nf.test b/modules/nf-core/cat/cat/tests/main.nf.test
deleted file mode 100644
index 030c6649..00000000
--- a/modules/nf-core/cat/cat/tests/main.nf.test
+++ /dev/null
@@ -1,192 +0,0 @@
-nextflow_process {
-
- name "Test Process CAT_CAT"
- script "../main.nf"
- process "CAT_CAT"
-
- tag "modules"
- tag "modules_nfcore"
- tag "cat"
- tag "cat/cat"
-
- test("sarscov2 - genome - error: name conflict") {
- when {
- process {
- """
- input[0] =
- [
- [ id:'genome', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true)
- ]
- ]
- """
- }
- }
- then {
- assertAll(
- { assert !process.success },
- { assert process.stdout.toString().contains("The name of the input file can't be the same as for the output prefix") },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 - [ fasta, sizes ] - unzipped") {
- when {
- process {
- """
- input[0] =
- [
- [ id:'test', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true)
- ]
- ]
- """
- }
- }
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
-
- test("sarscov2 - [ gff3_gz, maf_gz ] - zipped") {
- when {
- process {
- """
- input[0] =
- [
- [ id:'test', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true)
- ]
- ]
- """
- }
- }
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match()
- }
- )
- }
- }
-
- test("sarscov2 - [ gff3_gz, maf_gz ] - unzipped") {
- config './nextflow.config'
-
- when {
- params {
- cat_prefix = "cat.txt"
- }
- process {
- """
- input[0] =
- [
- [ id:'test', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.gff3.gz', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/alignment/last/contigs.genome.maf.gz', checkIfExists: true)
- ]
- ]
- """
- }
- }
-
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
-
- }
-
- test("sarscov2 - [ fasta, sizes ] - zipped") {
- config './nextflow.config'
-
- when {
- params {
- cat_prefix = "cat.txt.gz"
- }
- process {
- """
- input[0] =
- [
- [ id:'test', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.sizes', checkIfExists: true)
- ]
- ]
- """
- }
- }
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 - fasta - zipped") {
- config './nextflow.config'
-
- when {
- params {
- cat_prefix = "cat.txt.gz"
- }
- process {
- """
- input[0] =
- [
- [ id:'test', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ]
- ]
- """
- }
- }
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-
- test("sarscov2 - fasta - unzipped - stub") {
- options "-stub"
-
- when {
- process {
- """
- input[0] =
- [
- [ id:'test', single_end:true ],
- [
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ]
- ]
- """
- }
- }
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-}
diff --git a/modules/nf-core/cat/cat/tests/main.nf.test.snap b/modules/nf-core/cat/cat/tests/main.nf.test.snap
deleted file mode 100644
index 5b4e4cc3..00000000
--- a/modules/nf-core/cat/cat/tests/main.nf.test.snap
+++ /dev/null
@@ -1,283 +0,0 @@
-{
- "sarscov2 - [ gff3_gz, maf_gz ] - unzipped": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
- ]
- ],
- "1": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ],
- "file_out": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "cat.txt:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
- ]
- ],
- "versions_cat": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T09:08:31.479828"
- },
- "sarscov2 - fasta - unzipped - stub": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ],
- "file_out": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fasta:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "versions_cat": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T16:16:28.118094"
- },
- "sarscov2 - [ fasta, sizes ] - zipped": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2"
- ]
- ],
- "1": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ],
- "file_out": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "cat.txt.gz:md5,f44b33a0e441ad58b2d3700270e2dbe2"
- ]
- ],
- "versions_cat": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T16:15:56.529595"
- },
- "sarscov2 - genome - error: name conflict": {
- "content": [
- {
- "0": [
-
- ],
- "1": [
-
- ],
- "file_out": [
-
- ],
- "versions_cat": [
-
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T16:14:54.496538"
- },
- "sarscov2 - [ fasta, sizes ] - unzipped": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2"
- ]
- ],
- "1": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ],
- "file_out": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.fasta:md5,f44b33a0e441ad58b2d3700270e2dbe2"
- ]
- ],
- "versions_cat": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T11:26:29.942203"
- },
- "sarscov2 - [ gff3_gz, maf_gz ] - zipped": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
- ]
- ],
- "1": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ],
- "file_out": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "test.gff3.gz:md5,c439d3b60e7bc03e8802a451a0d9a5d9"
- ]
- ],
- "versions_cat": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T11:26:45.679401"
- },
- "sarscov2 - fasta - zipped": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "cat.txt.gz:md5,6e9fe4042a72f2345f644f239272b7e6"
- ]
- ],
- "1": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ],
- "file_out": [
- [
- {
- "id": "test",
- "single_end": true
- },
- "cat.txt.gz:md5,6e9fe4042a72f2345f644f239272b7e6"
- ]
- ],
- "versions_cat": [
- [
- "CAT_CAT",
- "pigz",
- "2.8"
- ]
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2025-12-10T16:16:12.439911"
- }
-}
\ No newline at end of file
diff --git a/modules/nf-core/cat/cat/tests/nextflow.config b/modules/nf-core/cat/cat/tests/nextflow.config
deleted file mode 100644
index 5bc9bf50..00000000
--- a/modules/nf-core/cat/cat/tests/nextflow.config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-process {
- withName: CAT_CAT {
- ext.prefix = "${params.cat_prefix}"
- }
-}
diff --git a/subworkflows/local/fastq_align_rna/main.nf b/subworkflows/local/fastq_align_rna/main.nf
index ed99fa48..ce0d6862 100644
--- a/subworkflows/local/fastq_align_rna/main.nf
+++ b/subworkflows/local/fastq_align_rna/main.nf
@@ -5,11 +5,9 @@
//
-include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
-include { CAT_CAT as CAT_JUNCTIONS } from "../../../modules/nf-core/cat/cat/main.nf"
-include { CAT_CAT as CAT_SPLICE_JUNCTIONS } from "../../../modules/nf-core/cat/cat/main.nf"
-include { GNU_SORT as SORT_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
-include { GNU_SORT as SORT_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
+include { GNU_SORT as SORT_MERGE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { GNU_SORT as SORT_MERGE_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
workflow FASTQ_ALIGN_RNA {
take:
@@ -47,21 +45,19 @@ workflow FASTQ_ALIGN_RNA {
// Concatenate splice junction files
def ch_splice_junctions_to_merge = group_junctions(STAR_ALIGN.out.spl_junc_tab)
- CAT_SPLICE_JUNCTIONS(ch_splice_junctions_to_merge)
- SORT_SPLICE_JUNCTIONS(CAT_SPLICE_JUNCTIONS.out.file_out)
- ch_versions = ch_versions.mix(SORT_SPLICE_JUNCTIONS.out.versions.first())
+ SORT_MERGE_SPLICE_JUNCTIONS(ch_splice_junctions_to_merge)
+ ch_versions = ch_versions.mix(SORT_MERGE_SPLICE_JUNCTIONS.out.versions.first())
// Concatenate junction files
def ch_junctions_to_merge = group_junctions(STAR_ALIGN.out.junction)
- CAT_JUNCTIONS(ch_junctions_to_merge)
- SORT_JUNCTIONS(CAT_JUNCTIONS.out.file_out)
- ch_versions = ch_versions.mix(SORT_JUNCTIONS.out.versions.first())
+ SORT_MERGE_JUNCTIONS(ch_junctions_to_merge)
+ ch_versions = ch_versions.mix(SORT_MERGE_JUNCTIONS.out.versions.first())
emit:
bam = ch_bam // channel: [ [meta], bam ]
- splice_junctions = SORT_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
- junctions = SORT_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
+ splice_junctions = SORT_MERGE_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
+ junctions = SORT_MERGE_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
reports = ch_reports // channel: [ [meta], log ]
versions = ch_versions // channel: [ versions.yml ]
}
From 9453c195183460e64b95044ad3304b38a9b45e47 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 17 Dec 2025 14:26:05 +0100
Subject: [PATCH 122/228] prettier
---
modules.json | 126 +++++++++++++--------------------------------------
1 file changed, 31 insertions(+), 95 deletions(-)
diff --git a/modules.json b/modules.json
index c83142f7..d1d3d5eb 100644
--- a/modules.json
+++ b/modules.json
@@ -8,199 +8,145 @@
"bcl2fastq": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": [
- "bcl_demultiplex"
- ]
+ "installed_by": ["bcl_demultiplex"]
},
"bclconvert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "bcl_demultiplex",
- "modules"
- ],
+ "installed_by": ["bcl_demultiplex", "modules"],
"patch": "modules/nf-core/bclconvert/bclconvert.diff"
},
"biobambam/bamsormadup": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff"
},
"bowtie2/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "fastq_align_dna",
- "modules"
- ],
+ "installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/bowtie2/align/bowtie2-align.diff"
},
"bwa/mem": {
"branch": "master",
"git_sha": "1c46359c837ef768b004519f535c30378e8289fc",
- "installed_by": [
- "fastq_align_dna"
- ],
+ "installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwa/mem/bwa-mem.diff"
},
"bwamem2/mem": {
"branch": "master",
"git_sha": "d86336f3e7ae0d5f76c67b0859409769cfeb2af2",
- "installed_by": [
- "fastq_align_dna"
- ],
+ "installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff"
},
"dragmap/align": {
"branch": "master",
"git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
- "installed_by": [
- "fastq_align_dna"
- ],
+ "installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
"fastp": {
"branch": "master",
"git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"gnu/sort": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"md5sum": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"mosdepth": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/mosdepth/mosdepth.diff"
},
"multiqc": {
"branch": "master",
"git_sha": "9656d955b700a8707c4a67821ab056f8c1095675",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/multiqc/multiqc.diff"
},
"picard/collecthsmetrics": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff"
},
"picard/collectmultiplemetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff"
},
"picard/collectwgsmetrics": {
"branch": "master",
"git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
"samtools/convert": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/convert/samtools-convert.diff"
},
"samtools/coverage": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
"samtools/flagstat": {
"branch": "master",
"git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"samtools/idxstats": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": [
- "modules"
- ]
+ "installed_by": ["modules"]
},
"samtools/sormadup": {
"branch": "master",
"git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sormadup/samtools-sormadup.diff"
},
"samtools/sort": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sort/samtools-sort.diff"
},
"samtools/stats": {
"branch": "master",
"git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/samtools/stats/samtools-stats.diff"
},
"snapaligner/align": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "fastq_align_dna",
- "modules"
- ],
+ "installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/snapaligner/align/snapaligner-align.diff"
},
"star/align": {
"branch": "master",
"git_sha": "ce9e10540a1555145ddd1ddd8b15f7443cbe1449",
- "installed_by": [
- "modules"
- ],
+ "installed_by": ["modules"],
"patch": "modules/nf-core/star/align/star-align.diff"
},
"strobealign": {
"branch": "master",
"git_sha": "d5cc72b63c4e1565cb66e83f0577b04c0bb54d5c",
- "installed_by": [
- "fastq_align_dna",
- "modules"
- ],
+ "installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/strobealign/strobealign.diff"
}
}
@@ -210,40 +156,30 @@
"bcl_demultiplex": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"fastq_align_dna": {
"branch": "master",
"git_sha": "070ddae7fb59384d3d85bf69eb9a1d71ab33ada9",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"utils_nextflow_pipeline": {
"branch": "master",
"git_sha": "05954dab2ff481bcb999f24455da29a5828af08d",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"utils_nfcore_pipeline": {
"branch": "master",
"git_sha": "df4d1c8cdee98a1bbbed8fc51e82296568e0f9c1",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
"git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": [
- "subworkflows"
- ]
+ "installed_by": ["subworkflows"]
}
}
}
}
}
-}
\ No newline at end of file
+}
From 6a7d91d6511fa573f34b1912cc52a6601091aca5 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 14:52:29 +0100
Subject: [PATCH 123/228] fix tests
---
conf/modules.config | 1 +
.../local/fastq_align_rna/main.nf.test.snap | 52 ++++++++++--
.../fastq_to_aligned_cram/main.nf.test.snap | 82 ++++++++++++++++---
tests/workflows/preprocessing.nf.test.snap | 34 ++++++--
4 files changed, 143 insertions(+), 26 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 9aa74e0e..db240008 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -138,6 +138,7 @@ process {
//// STAR
withName: '.*FASTQ_ALIGN_RNA:STAR_ALIGN' {
+ ext.prefix = { "${meta.id}.star" }
cpus = 16
memory = 64.GB
ext.args = {
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index bd1553c9..3c8c8522 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -14,7 +14,25 @@
"samplename": "test",
"single_end": false
},
- "test.Aligned.out.bam"
+ "test.star.Aligned.out.bam"
+ ]
+ ],
+ "junctions": [
+ [
+ {
+ "groupSize": 1,
+ "groupTarget": {
+ "id": "test",
+ "samplename": "test",
+ "single_end": false,
+ "sample_type": "RNA",
+ "genome": {
+ "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"
+ }
+ }
+ },
+ "test.Chimeric.out.junction:md5,b560229eb850489cf0cc6f60baee57b5"
]
],
"reports": [
@@ -29,7 +47,7 @@
"samplename": "test",
"single_end": false
},
- "test.Log.final.out"
+ "test.star.Log.final.out"
],
[
{
@@ -42,7 +60,7 @@
"samplename": "test",
"single_end": false
},
- "test.Log.out"
+ "test.star.Log.out"
],
[
{
@@ -55,19 +73,39 @@
"samplename": "test",
"single_end": false
},
- "test.Log.progress.out"
+ "test.star.Log.progress.out"
+ ]
+ ],
+ "splice_junctions": [
+ [
+ {
+ "groupSize": 1,
+ "groupTarget": {
+ "id": "test",
+ "samplename": "test",
+ "single_end": false,
+ "sample_type": "RNA",
+ "genome": {
+ "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"
+ }
+ }
+ },
+ "test.Sj.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
]
],
"versions": [
- "versions.yml:md5,a08c174f2d393f0b39c2cfe003ffafb9"
+ "versions.yml:md5,a08c174f2d393f0b39c2cfe003ffafb9",
+ "versions.yml:md5,e0beb4fb46280de51c432ed766a0cdb2",
+ "versions.yml:md5,e1135512a195d12c4b6aaadd8e84dcf6"
]
}
],
"meta": {
"nf-test": "0.9.2",
- "nextflow": "25.10.0"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-11-04T14:22:48.650056385"
+ "timestamp": "2025-12-17T14:44:53.335659555"
},
"fastq align rna - unknown aligner": {
"content": [
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index d1459def..a4ee2182 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -23,6 +23,12 @@
"test.merged.cram",
"test.merged.cram.crai"
]
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"sormadup_metrics": [
@@ -34,10 +40,10 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:40:29.319628"
+ "timestamp": "2025-12-17T14:52:18.252297311"
},
"fastq to cram - bwa - bamsormadup": {
"content": [
@@ -63,6 +69,12 @@
"test.cram",
"test.cram.crai"
]
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"sormadup_metrics": [
[
@@ -91,10 +103,10 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T12:52:20.737608"
+ "timestamp": "2025-12-17T14:46:54.525880067"
},
"fastq to cram - bwa - samtools sormadup": {
"content": [
@@ -120,6 +132,12 @@
"test.merged.cram",
"test.merged.cram.crai"
]
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"sormadup_metrics": [
[
@@ -136,7 +154,7 @@
}
}
},
- "test.merged.metrics:md5,a4129081c3f2f10e6f6ecdf8b1c44852"
+ "test.merged.metrics:md5,795c73aa836eb480e418f52db98e37cc"
]
],
"versions": [
@@ -147,10 +165,10 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:04:47.356008"
+ "timestamp": "2025-12-17T14:50:28.614932101"
},
"fastq to cram - star - bamsormadup": {
"content": [
@@ -177,6 +195,42 @@
"test.cram.crai"
]
],
+ "rna_junctions": [
+ [
+ {
+ "groupSize": 1,
+ "groupTarget": {
+ "id": "test",
+ "samplename": "test",
+ "single_end": false,
+ "sample_type": "RNA",
+ "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"
+ }
+ }
+ },
+ "test.Chimeric.out.junction:md5,b560229eb850489cf0cc6f60baee57b5"
+ ]
+ ],
+ "rna_splice_junctions": [
+ [
+ {
+ "groupSize": 1,
+ "groupTarget": {
+ "id": "test",
+ "samplename": "test",
+ "single_end": false,
+ "sample_type": "RNA",
+ "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"
+ }
+ }
+ },
+ "test.Sj.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
+ ]
+ ],
"sormadup_metrics": [
[
{
@@ -202,10 +256,10 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:04:21.082358"
+ "timestamp": "2025-12-17T14:49:33.159222222"
},
"fastq to cram - bwa - samtools sort": {
"content": [
@@ -231,6 +285,12 @@
"test.merged.cram",
"test.merged.cram.crai"
]
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"sormadup_metrics": [
@@ -242,9 +302,9 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-02T13:40:06.599667"
+ "timestamp": "2025-12-17T14:51:22.925873858"
}
}
\ No newline at end of file
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 82cf9c36..79b6910d 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -510,6 +510,12 @@
],
"picard_wgsmetrics": [
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"samtools_coverage": [
[
@@ -535,7 +541,7 @@
"id": "sample1"
}
},
- "sample1.coverage.txt:md5,656b7371132475783094d80b7d2292b5"
+ "sample1.coverage.txt:md5,2273df8af027c91ad1a51ab62ff39f13"
]
],
"samtools_flagstat": [
@@ -616,7 +622,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
+ "sample1.stats:md5,48c3d9d21314717edf49cfd80014be2a"
]
],
"sormadup_metrics": [
@@ -663,10 +669,10 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-09T11:03:22.986076"
+ "timestamp": "2025-12-17T14:17:54.029873192"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -881,6 +887,12 @@
],
"picard_wgsmetrics": [
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"samtools_coverage": [
@@ -1006,10 +1018,10 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-09T11:09:14.114309"
+ "timestamp": "2025-12-17T14:25:25.520000109"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1437,6 +1449,12 @@
},
"sample1.CollectWgsMetrics.coverage_metrics"
]
+ ],
+ "rna_junctions": [
+
+ ],
+ "rna_splice_junctions": [
+
],
"samtools_coverage": [
[
@@ -1585,9 +1603,9 @@
}
],
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-09T11:06:50.62591"
+ "timestamp": "2025-12-17T14:22:40.972493649"
}
}
\ No newline at end of file
From b077cf6a2b1b62dc27a5d01ce86f8c6e4dbc1117 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 15:30:28 +0100
Subject: [PATCH 124/228] fix unstable stat files in snapshot
---
tests/workflows/preprocessing.nf.test | 4 +-
tests/workflows/preprocessing.nf.test.snap | 48 +++++++++++-----------
2 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index 6caacb09..e7c17760 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -69,7 +69,9 @@ nextflow_workflow {
"picard_wgsmetrics",
"picard_multiplemetrics_pdf",
"picard_multiplemetrics",
- "picard_hsmetrics"
+ "picard_hsmetrics",
+ "samtools_flagstat",
+ "samtools_coverage"
])
).match()
}
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 79b6910d..d0d59981 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -522,26 +522,26 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WES",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
- "id": "sample1"
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WES"
}
},
- "sample1.coverage.txt:md5,2273df8af027c91ad1a51ab62ff39f13"
+ "sample1.coverage.txt"
]
],
"samtools_flagstat": [
@@ -549,26 +549,26 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WES",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
- "id": "sample1"
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WES"
}
},
- "sample1.flagstat:md5,cd826b1749737d52499cf543d101ecd2"
+ "sample1.flagstat"
]
],
"samtools_idxstats": [
@@ -622,7 +622,7 @@
"id": "sample1"
}
},
- "sample1.stats:md5,48c3d9d21314717edf49cfd80014be2a"
+ "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
]
],
"sormadup_metrics": [
@@ -672,7 +672,7 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T14:17:54.029873192"
+ "timestamp": "2025-12-17T15:25:16.549534093"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
From a0bbefba0143862c9cbeb9bc69e7c579b1f77a6a Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 16:03:17 +0100
Subject: [PATCH 125/228] fix unstable stat files in snapshot
---
tests/workflows/preprocessing.nf.test | 8 ++-
tests/workflows/preprocessing.nf.test.snap | 70 +++++++++++-----------
2 files changed, 41 insertions(+), 37 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index e7c17760..50e25c9e 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -139,7 +139,9 @@ nextflow_workflow {
"picard_wgsmetrics",
"picard_multiplemetrics_pdf",
"picard_multiplemetrics",
- "picard_hsmetrics"
+ "picard_hsmetrics",
+ "samtools_flagstat",
+ "samtools_coverage"
])
).match()
}
@@ -210,7 +212,9 @@ nextflow_workflow {
"picard_wgsmetrics",
"picard_multiplemetrics_pdf",
"picard_multiplemetrics",
- "picard_hsmetrics"
+ "picard_hsmetrics",
+ "samtools_flagstat",
+ "samtools_coverage"
])
).match()
}
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index d0d59981..f072b009 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -902,26 +902,26 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WES",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
- "id": "sample1"
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WES"
}
},
- "sample1.flagstat:md5,cd826b1749737d52499cf543d101ecd2"
+ "sample1.flagstat"
]
],
"samtools_idxstats": [
@@ -1021,7 +1021,7 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T14:25:25.520000109"
+ "timestamp": "2025-12-17T15:54:33.813455843"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1461,25 +1461,25 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WGS",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
- "id": "sample1"
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WGS"
}
},
- "sample1.coverage.txt:md5,656b7371132475783094d80b7d2292b5"
+ "sample1.coverage.txt"
]
],
"samtools_flagstat": [
@@ -1487,25 +1487,25 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WGS",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
- "id": "sample1"
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WGS"
}
},
- "sample1.flagstat:md5,cd826b1749737d52499cf543d101ecd2"
+ "sample1.flagstat"
]
],
"samtools_idxstats": [
@@ -1606,6 +1606,6 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T14:22:40.972493649"
+ "timestamp": "2025-12-17T15:51:53.194202966"
}
}
\ No newline at end of file
From 68c3b7727c9bd54e2252600c01eebe15765251b5 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Wed, 17 Dec 2025 16:45:28 +0100
Subject: [PATCH 126/228] fixing tests took waaaaaaay too long
---
.../local/fastq_align_rna/main.nf.test | 2 +-
.../local/fastq_align_rna/main.nf.test.snap | 16 ++---
.../local/fastq_to_aligned_cram/main.nf.test | 3 +-
.../fastq_to_aligned_cram/main.nf.test.snap | 14 ++--
tests/workflows/preprocessing.nf.test | 9 ++-
tests/workflows/preprocessing.nf.test.snap | 72 +++++++++----------
6 files changed, 62 insertions(+), 54 deletions(-)
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test b/tests/subworkflows/local/fastq_align_rna/main.nf.test
index caf71651..c8319d20 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test
@@ -39,7 +39,7 @@ nextflow_workflow {
then {
assert workflow.success
assert snapshot(
- sanitizeOutput(workflow.out, unstableKeys:["bam", "reports"])
+ sanitizeOutput(workflow.out, unstableKeys:["bam", "reports", "junctions"])
).match()
}
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index 3c8c8522..cf2552d1 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -22,17 +22,17 @@
{
"groupSize": 1,
"groupTarget": {
+ "genome": {
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
+ },
"id": "test",
- "samplename": "test",
- "single_end": false,
"sample_type": "RNA",
- "genome": {
- "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"
- }
+ "samplename": "test",
+ "single_end": false
}
},
- "test.Chimeric.out.junction:md5,b560229eb850489cf0cc6f60baee57b5"
+ "test.Chimeric.out.junction"
]
],
"reports": [
@@ -105,7 +105,7 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T14:44:53.335659555"
+ "timestamp": "2025-12-17T16:44:58.048883426"
},
"fastq align rna - unknown aligner": {
"content": [
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
index 6ee92e5e..9a7a9eb3 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
@@ -64,7 +64,8 @@ nextflow_workflow {
sample_type:'RNA',
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"
+ fai: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ star: "s3://test-data/genomics/homo_sapiens/genome/star/"
]
], // meta map
[
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index a4ee2182..dd208219 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -183,7 +183,8 @@
"groupTarget": {
"genome_data": {
"fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
- "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
+ "star": "s3://test-data/genomics/homo_sapiens/genome/star/"
},
"id": "test",
"sample_type": "RNA",
@@ -206,7 +207,8 @@
"sample_type": "RNA",
"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"
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "star": "s3://test-data/genomics/homo_sapiens/genome/star/"
}
}
},
@@ -224,7 +226,8 @@
"sample_type": "RNA",
"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"
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "star": "s3://test-data/genomics/homo_sapiens/genome/star/"
}
}
},
@@ -242,7 +245,8 @@
"sample_type": "RNA",
"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"
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "star": "s3://test-data/genomics/homo_sapiens/genome/star/"
}
}
},
@@ -259,7 +263,7 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T14:49:33.159222222"
+ "timestamp": "2025-12-17T16:27:53.162318921"
},
"fastq to cram - bwa - samtools sort": {
"content": [
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index 50e25c9e..45c0fba2 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -71,7 +71,8 @@ nextflow_workflow {
"picard_multiplemetrics",
"picard_hsmetrics",
"samtools_flagstat",
- "samtools_coverage"
+ "samtools_coverage",
+ "samtools_stats"
])
).match()
}
@@ -141,7 +142,8 @@ nextflow_workflow {
"picard_multiplemetrics",
"picard_hsmetrics",
"samtools_flagstat",
- "samtools_coverage"
+ "samtools_coverage",
+ "samtools_stats"
])
).match()
}
@@ -214,7 +216,8 @@ nextflow_workflow {
"picard_multiplemetrics",
"picard_hsmetrics",
"samtools_flagstat",
- "samtools_coverage"
+ "samtools_coverage",
+ "samtools_stats"
])
).match()
}
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index f072b009..20333b5b 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -603,26 +603,26 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WES",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
- "id": "sample1"
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WES"
}
},
- "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
+ "sample1.stats"
]
],
"sormadup_metrics": [
@@ -672,7 +672,7 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T15:25:16.549534093"
+ "timestamp": "2025-12-17T16:32:55.414537131"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -956,26 +956,26 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WES",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
- "id": "sample1"
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WES"
}
},
- "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
+ "sample1.stats"
]
],
"sormadup_metrics": [
@@ -1021,7 +1021,7 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T15:54:33.813455843"
+ "timestamp": "2025-12-17T16:40:10.119231711"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1539,25 +1539,25 @@
{
"groupSize": 1,
"groupTarget": {
- "samplename": "sample1",
- "library": "test",
- "organism": "Homo sapiens",
- "tag": "WGS",
- "sample_type": "DNA",
"aligner": "bwamem",
- "single_end": false,
"genome": "GRCh38",
"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/",
+ "dict": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict",
+ "fai": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"gtf": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
},
- "id": "sample1"
+ "id": "sample1",
+ "library": "test",
+ "organism": "Homo sapiens",
+ "sample_type": "DNA",
+ "samplename": "sample1",
+ "single_end": false,
+ "tag": "WGS"
}
},
- "sample1.stats:md5,bbe2999c6baf17c96d4f00370c6b9501"
+ "sample1.stats"
]
],
"sormadup_metrics": [
@@ -1606,6 +1606,6 @@
"nf-test": "0.9.2",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T15:51:53.194202966"
+ "timestamp": "2025-12-17T16:37:31.272800991"
}
}
\ No newline at end of file
From ddc9928a4c57cae00c7c2fef12f505c3f31cf290 Mon Sep 17 00:00:00 2001
From: Nicolas Vannieuwkerke
Date: Fri, 19 Dec 2025 10:01:17 +0100
Subject: [PATCH 127/228] fix splice junctions file name
---
conf/modules.config | 2 +-
.../local/fastq_align_rna/main.nf.test.snap | 4 +--
.../fastq_to_aligned_cram/main.nf.test.snap | 34 +++++++++----------
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index db240008..f35f76e7 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -156,7 +156,7 @@ process {
}
withName: '.*FASTQ_ALIGN_RNA:SORT_MERGE_SPLICE_JUNCTIONS' {
- ext.prefix = { "${meta.id}.Sj.out" }
+ ext.prefix = { "${meta.id}.SJ.out" }
ext.suffix = "tab"
ext.args = '-k1,1n -k2,2n -k3,3n --merge'
}
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index cf2552d1..2cd3d63c 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -91,7 +91,7 @@
}
}
},
- "test.Sj.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
+ "test.SJ.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
]
],
"versions": [
@@ -119,4 +119,4 @@
},
"timestamp": "2024-05-28T16:17:08.089796673"
}
-}
\ No newline at end of file
+}
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index dd208219..aabf04cd 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -25,13 +25,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
],
"versions": [
"versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
@@ -49,7 +49,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -71,10 +71,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -112,7 +112,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -134,10 +134,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -174,7 +174,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -231,7 +231,7 @@
}
}
},
- "test.Sj.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
+ "test.SJ.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
]
],
"sormadup_metrics": [
@@ -269,7 +269,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -291,13 +291,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
],
"versions": [
"versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
@@ -311,4 +311,4 @@
},
"timestamp": "2025-12-17T14:51:22.925873858"
}
-}
\ No newline at end of file
+}
From b4181518839604e5cfda9f84c61242fb88bec3f5 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Sun, 21 Dec 2025 14:47:48 +0100
Subject: [PATCH 128/228] fix conditional config for samtools_sormadup
---
conf/modules.config | 2 ++
conf/profiles/gcp.config | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index f35f76e7..480d1c75 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -156,12 +156,14 @@ process {
}
withName: '.*FASTQ_ALIGN_RNA:SORT_MERGE_SPLICE_JUNCTIONS' {
+ cpus = 1
ext.prefix = { "${meta.id}.SJ.out" }
ext.suffix = "tab"
ext.args = '-k1,1n -k2,2n -k3,3n --merge'
}
withName: '.*FASTQ_ALIGN_RNA:SORT_MERGE_JUNCTIONS' {
+ cpus = 1
ext.prefix = { "${meta.id}.Chimeric.out" }
ext.suffix = "junction"
ext.args = '-k1,1n -k2,2n -k4,4n -k5,5n --merge'
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 577dd18d..2bab1b6d 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -33,11 +33,11 @@ process {
// Alignment post-processing resources
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
- disk = { input instanceof List ? input.size().sum() * 3 * task.attempt : input.size() * 3 * task.attempt }
+ disk = { input instanceof List ? input.sum { it.size() } * 3 * task.attempt : input.size() * 3 * task.attempt }
time = 24.h
}
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
- disk = { input instanceof List ? input.size().sum() * 3 * task.attempt : input.size() * 3 * task.attempt }
+ disk = { input instanceof List ? input.sum { it.size() } * 3 * task.attempt : input.size() * 3 * task.attempt }
time = 24.h
}
// withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
From 082a73685b7943316b321f12bfe449c83025a3da Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 23 Dec 2025 13:42:13 +0100
Subject: [PATCH 129/228] bump fastp module
---
modules.json | 2 +-
modules/nf-core/fastp/main.nf | 18 +--
modules/nf-core/fastp/tests/main.nf.test.snap | 108 +++++++++---------
workflows/preprocessing.nf | 2 +-
4 files changed, 65 insertions(+), 65 deletions(-)
diff --git a/modules.json b/modules.json
index d1d3d5eb..0b710f92 100644
--- a/modules.json
+++ b/modules.json
@@ -48,7 +48,7 @@
},
"fastp": {
"branch": "master",
- "git_sha": "d9ec4ef289ad39b8a662a7a12be50409b11df84b",
+ "git_sha": "b8f1de0ac853ae5b56c63450d47438f899c553d0",
"installed_by": ["modules"]
},
"gnu/sort": {
diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf
index 85013f5d..7538fc3a 100644
--- a/modules/nf-core/fastp/main.nf
+++ b/modules/nf-core/fastp/main.nf
@@ -29,9 +29,9 @@ process FASTP {
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
def adapter_list = adapter_fasta ? "--adapter_fasta ${adapter_fasta}" : ""
- def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_1.fail.fastq.gz --unpaired2 ${prefix}_2.fail.fastq.gz" : ''
- def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_1.fastp.fastq.gz" )
- def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_2.fastp.fastq.gz"
+ def fail_fastq = save_trimmed_fail && meta.single_end ? "--failed_out ${prefix}.fail.fastq.gz" : save_trimmed_fail && !meta.single_end ? "--failed_out ${prefix}.paired.fail.fastq.gz --unpaired1 ${prefix}_R1.fail.fastq.gz --unpaired2 ${prefix}_R2.fail.fastq.gz" : ''
+ def out_fq1 = discard_trimmed_pass ?: ( meta.single_end ? "--out1 ${prefix}.fastp.fastq.gz" : "--out1 ${prefix}_R1.fastp.fastq.gz" )
+ def out_fq2 = discard_trimmed_pass ?: "--out2 ${prefix}_R2.fastp.fastq.gz"
// Added soft-links to original fastqs for consistent naming in MultiQC
// Use single ended for interleaved. Add --interleaved_in in config.
if ( task.ext.args?.contains('--interleaved_in') ) {
@@ -78,11 +78,11 @@ process FASTP {
} else {
def merge_fastq = save_merged ? "-m --merged_out ${prefix}.merged.fastq.gz" : ''
"""
- [ ! -f ${prefix}_1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_1.fastq.gz
- [ ! -f ${prefix}_2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_2.fastq.gz
+ [ ! -f ${prefix}_R1.fastq.gz ] && ln -sf ${reads[0]} ${prefix}_R1.fastq.gz
+ [ ! -f ${prefix}_R2.fastq.gz ] && ln -sf ${reads[1]} ${prefix}_R2.fastq.gz
fastp \\
- --in1 ${prefix}_1.fastq.gz \\
- --in2 ${prefix}_2.fastq.gz \\
+ --in1 ${prefix}_R1.fastq.gz \\
+ --in2 ${prefix}_R2.fastq.gz \\
$out_fq1 \\
$out_fq2 \\
--json ${prefix}.fastp.json \\
@@ -105,9 +105,9 @@ process FASTP {
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end
- def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_2.fastp.fastq.gz"
+ def touch_reads = (discard_trimmed_pass) ? "" : (is_single_output) ? "echo '' | gzip > ${prefix}.fastp.fastq.gz" : "echo '' | gzip > ${prefix}_R1.fastp.fastq.gz ; echo '' | gzip > ${prefix}_R2.fastp.fastq.gz"
def touch_merged = (!is_single_output && save_merged) ? "echo '' | gzip > ${prefix}.merged.fastq.gz" : ""
- def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_1.fail.fastq.gz ; echo '' | gzip > ${prefix}_2.fail.fastq.gz"
+ def touch_fail_fastq = (!save_trimmed_fail) ? "" : meta.single_end ? "echo '' | gzip > ${prefix}.fail.fastq.gz" : "echo '' | gzip > ${prefix}.paired.fail.fastq.gz ; echo '' | gzip > ${prefix}_R1.fail.fastq.gz ; echo '' | gzip > ${prefix}_R2.fail.fastq.gz"
"""
$touch_reads
$touch_fail_fastq
diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap
index a30c680d..2276fc08 100644
--- a/modules/nf-core/fastp/tests/main.nf.test.snap
+++ b/modules/nf-core/fastp/tests/main.nf.test.snap
@@ -97,8 +97,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7",
- "test_2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39"
+ "test_R1.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7",
+ "test_R2.fastp.fastq.gz:md5,25cbdca08e2083dbd4f0502de6b62f39"
]
]
],
@@ -113,10 +113,10 @@
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-19T16:23:12.436191"
+ "timestamp": "2025-12-22T14:32:22.887952042"
},
"test_fastp_paired_end_merged_adapterlist": {
"content": [
@@ -127,8 +127,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672",
- "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba"
+ "test_R1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672",
+ "test_R2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba"
]
]
],
@@ -149,10 +149,10 @@
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-19T16:23:32.267735"
+ "timestamp": "2025-12-22T14:32:53.752975682"
},
"test_fastp_single_end_qc_only": {
"content": [
@@ -193,8 +193,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7",
- "test_2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a"
+ "test_R1.fastp.fastq.gz:md5,6ff32a64c5188b9a9192be1398c262c7",
+ "test_R2.fastp.fastq.gz:md5,db0cb7c9977e94ac2b4b446ebd017a8a"
]
]
],
@@ -206,8 +206,8 @@
},
[
"test.paired.fail.fastq.gz:md5,409b687c734cedd7a1fec14d316e1366",
- "test_1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6",
- "test_2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995"
+ "test_R1.fail.fastq.gz:md5,4f273cf3159c13f79e8ffae12f5661f6",
+ "test_R2.fail.fastq.gz:md5,f97b9edefb5649aab661fbc9e71fc995"
]
]
],
@@ -219,10 +219,10 @@
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-19T16:23:24.23891"
+ "timestamp": "2025-12-22T14:32:41.270456637"
},
"fastp - stub test_fastp_interleaved": {
"content": [
@@ -436,8 +436,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -517,8 +517,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -540,10 +540,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-11T09:55:37.413738"
+ "timestamp": "2025-12-22T14:33:44.204950729"
},
"test_fastp_paired_end_merged - stub": {
"content": [
@@ -555,8 +555,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -636,8 +636,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -659,10 +659,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-11T09:55:32.965652"
+ "timestamp": "2025-12-22T14:33:38.518882433"
},
"test_fastp_paired_end_merged": {
"content": [
@@ -673,8 +673,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672",
- "test_2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba"
+ "test_R1.fastp.fastq.gz:md5,54b726a55e992a869fd3fa778afe1672",
+ "test_R2.fastp.fastq.gz:md5,29d3b33b869f7b63417b8ff07bb128ba"
]
]
],
@@ -695,10 +695,10 @@
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-19T16:23:28.074624"
+ "timestamp": "2025-12-22T14:32:47.366974895"
},
"test_fastp_paired_end - stub": {
"content": [
@@ -710,8 +710,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -785,8 +785,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -802,10 +802,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-11T09:55:14.414258"
+ "timestamp": "2025-12-22T14:33:16.494574544"
},
"test_fastp_single_end": {
"content": [
@@ -957,8 +957,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -997,8 +997,8 @@
},
[
"test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -1042,8 +1042,8 @@
"single_end": false
},
[
- "test_1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fastp.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -1055,8 +1055,8 @@
},
[
"test.paired.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test_2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "test_R1.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test_R2.fail.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
]
],
@@ -1069,10 +1069,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-09-11T09:55:28.399328"
+ "timestamp": "2025-12-22T14:33:32.863505882"
},
"fastp test_fastp_interleaved": {
"content": [
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 9149e445..6d2802eb 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -220,7 +220,7 @@ workflow PREPROCESSING {
}
.transpose()
.map { meta, reads ->
- def new_id = reads instanceof List ? reads[0].getName() - ~/_1.fastp.*/ : reads.getName() - ~/.fastp.*/
+ def new_id = reads instanceof List ? reads[0].getName() - ~/_R1.fastp.*/ : reads.getName() - ~/.fastp.*/
return [
meta - meta.subMap('id') + [id: new_id],
reads,
From 6ee5e9d9b3b8cb982fb3726580be29659029479c Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 23 Dec 2025 14:30:07 +0100
Subject: [PATCH 130/228] fix snapshots
---
tests/workflows/preprocessing.nf.test.snap | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 20333b5b..15d55f4e 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -108,7 +108,7 @@
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
- "sample1.fastp.json:md5,2edca71b00e4804eb7b39ff72f1c304a"
+ "sample1.fastp.json:md5,5a65f5141251ac26b8f0a0d0a618b524"
]
],
"md5sums": [
@@ -669,10 +669,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
+ "nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T16:32:55.414537131"
+ "timestamp": "2025-12-23T13:59:59.404732"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -783,7 +783,7 @@
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
- "sample1.fastp.json:md5,2edca71b00e4804eb7b39ff72f1c304a"
+ "sample1.fastp.json:md5,5a65f5141251ac26b8f0a0d0a618b524"
]
],
"md5sums": [
@@ -1018,10 +1018,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
+ "nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T16:40:10.119231711"
+ "timestamp": "2025-12-23T14:06:35.503463"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1129,7 +1129,7 @@
},
"count": 1
},
- "sample1.fastp.json:md5,2edca71b00e4804eb7b39ff72f1c304a"
+ "sample1.fastp.json:md5,5a65f5141251ac26b8f0a0d0a618b524"
]
],
"md5sums": [
@@ -1603,9 +1603,9 @@
}
],
"meta": {
- "nf-test": "0.9.2",
+ "nf-test": "0.9.3",
"nextflow": "25.10.2"
},
- "timestamp": "2025-12-17T16:37:31.272800991"
+ "timestamp": "2025-12-23T14:04:00.643521"
}
}
\ No newline at end of file
From aa029ef91a6927e76999248deef22d44798efd14 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Sat, 24 Jan 2026 07:43:58 +0100
Subject: [PATCH 131/228] Change export_plots setting from true to false
takes too long
---
assets/multiqc_config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml
index 755c9880..cc354c76 100644
--- a/assets/multiqc_config.yml
+++ b/assets/multiqc_config.yml
@@ -8,7 +8,7 @@ report_section_order:
order: -1001
"nf-cmgg-preprocessing-summary":
order: -1002
-export_plots: true
+export_plots: false
disable_version_detection: true
bclconvert:
create_undetermined_barcode_barplots: true
From 605c622c984c76df8fcc20a17f548e2c5b238e61 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 4 Feb 2026 13:34:29 +0100
Subject: [PATCH 132/228] use custom multiqc
---
conf/modules.config | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 480d1c75..794ca8e8 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -273,19 +273,28 @@ 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" }
- ext.args = { params.multiqc_title ? "--title \"${params.multiqc_title}\"" : '' }
+ ext.args = {
+ [
+ "--template \"cmgg\"",
+ params.multiqc_title ? "--title \"${params.multiqc_title}\"" : "",
+ ].join(" ").trim()
+ }
}
withName: '.*MULTIQC_LIBRARY' {
- cpus = 1
- memory = 4.GB
ext.prefix = { meta.id ? "${meta.id}" : "multiqc_library" }
- ext.args = { meta.id ? "--title \"${meta.id} - Pool Summary\"" : '' }
+ ext.args = {
+ [
+ "--template \"cmgg\"",
+ meta.id ? "--title \"${meta.id} - Pool Summary\"" : "",
+ ].join(" ").trim()
+ }
}
}
From 2c0dcc8a655119a508f8005202cc3377859c1d04 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 4 Feb 2026 13:48:48 +0100
Subject: [PATCH 133/228] disable AI in reports
---
conf/modules.config | 2 ++
1 file changed, 2 insertions(+)
diff --git a/conf/modules.config b/conf/modules.config
index 794ca8e8..36734a8a 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -282,6 +282,7 @@ process {
ext.args = {
[
"--template \"cmgg\"",
+ "--no-ai",
params.multiqc_title ? "--title \"${params.multiqc_title}\"" : "",
].join(" ").trim()
}
@@ -292,6 +293,7 @@ process {
ext.args = {
[
"--template \"cmgg\"",
+ "--no-ai",
meta.id ? "--title \"${meta.id} - Pool Summary\"" : "",
].join(" ").trim()
}
From 29c77e626198281095b0bd10d1d83a18fe9af367 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 4 Feb 2026 14:04:59 +0100
Subject: [PATCH 134/228] fix linting
---
.nf-core.yml | 5 ++---
ro-crate-metadata.json | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/.nf-core.yml b/.nf-core.yml
index 2b4bcc77..a9c2a6ae 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -19,15 +19,14 @@ lint:
- LICENSE
merge_markers:
- bin/cmgg_genelists
- multiqc_config:
- - report_comment
+ multiqc_config: false
nextflow_config:
- manifest.name
- manifest.homePage
template_strings:
- bin/cmgg_genelists
nf_test_content: false
-nf_core_version: 3.5.1
+nf_core_version: 3.5.2
repository_type: pipeline
template:
author: Matthias De Smet, Nicolas Vannieuwkerke
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
index 632da7c3..55c3e77d 100644
--- a/ro-crate-metadata.json
+++ b/ro-crate-metadata.json
@@ -23,7 +23,7 @@
"@type": "Dataset",
"creativeWorkStatus": "InProgress",
"datePublished": "2025-11-13T15:11:21+00:00",
- "description": "# nf-cmgg/preprocessing\n\n[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.4.1)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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\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,fastq_1,fastq_2\nsample1,sample1,Homo sapiens,Library_Name,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\nfc_sample1,test,Homo sapiens,WES\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",
+ "description": "# nf-cmgg/preprocessing\n\n[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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\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"
From f32013180f1c8b00a5ab4e352207ef91b63c400e Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 6 Feb 2026 13:30:23 +0100
Subject: [PATCH 135/228] gcp config: add instance templates
---
conf/base.config | 22 ++++++++++++----------
conf/profiles/gcp.config | 3 +++
2 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/conf/base.config b/conf/base.config
index 27606500..60cf57dd 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -11,8 +11,9 @@
process {
cpus = { 1 * task.attempt }
- memory = { 6.GB * task.attempt }
+ memory = { 8.GB * task.attempt }
time = { 4.h * task.attempt }
+ machineType = 'template://gen-nfbatch-dev-small' // e2-standard-4
errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
maxRetries = 3
@@ -20,31 +21,32 @@ process {
// Process-specific resource requirements
withLabel:process_single {
+ machineType = 'template://gen-nfbatch-dev-small' // e2-standard-4
cpus = { 1 }
- memory = { 6.GB * task.attempt }
+ memory = { 8.GB * task.attempt }
time = { 4.h * task.attempt }
}
withLabel:process_low {
+ machineType = 'template://gen-nfbatch-dev-small' // e2-standard-4
cpus = { 2 * task.attempt }
- memory = { 12.GB * task.attempt }
+ memory = { 16.GB * task.attempt }
time = { 4.h * task.attempt }
}
withLabel:process_medium {
- cpus = { 6 * task.attempt }
- memory = { 36.GB * task.attempt }
+ machineType = 'template://gen-nfbatch-dev-medium' // n2-highmem-8
+ cpus = { 8 * task.attempt }
+ memory = { 64.GB * task.attempt }
time = { 8.h * task.attempt }
}
withLabel:process_high {
- cpus = { 12 * task.attempt }
- memory = { 72.GB * task.attempt }
+ machineType = 'template://gen-nfbatch-dev-large' // n2-highmem-16
+ cpus = { 16 * task.attempt }
+ memory = { 128.GB * task.attempt }
time = { 16.h * task.attempt }
}
withLabel:process_long {
time = { 20.h * task.attempt }
}
- withLabel:process_high_memory {
- memory = { 200.GB * task.attempt }
- }
withLabel:error_ignore {
errorStrategy = 'ignore'
}
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
index 2bab1b6d..cd2ebcba 100644
--- a/conf/profiles/gcp.config
+++ b/conf/profiles/gcp.config
@@ -13,6 +13,7 @@ process {
// BCL convert resources
withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' {
+ machineType = 'template://gen-nfbatch-dev-xlarge' // n2-highmem-32, 1TB disk
cpus = 32
memory = { 64.GB * task.attempt }
disk = { 1.TB * task.attempt }
@@ -33,10 +34,12 @@ process {
// Alignment post-processing resources
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
+ machineType = 'template://gen-nfbatch-dev-medium' // n2-highmem-8, 100GB disk
disk = { input instanceof List ? input.sum { it.size() } * 3 * task.attempt : input.size() * 3 * task.attempt }
time = 24.h
}
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
+ machineType = 'template://gen-nfbatch-dev-medium' // n2-highmem-8, 100GB disk
disk = { input instanceof List ? input.sum { it.size() } * 3 * task.attempt : input.size() * 3 * task.attempt }
time = 24.h
}
From 3c107281bf1cc7fd07a55428143cbaaa606ae9de Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 6 Feb 2026 14:56:32 +0100
Subject: [PATCH 136/228] remove analysis profiles and migrate to exernal repo
---
conf/base.config | 6 ----
conf/profiles/WES.config | 6 ----
conf/profiles/WGS.config | 6 ----
conf/profiles/copgt.config | 13 --------
conf/profiles/gcp.config | 63 -----------------------------------
conf/profiles/s3_ugent.config | 9 -----
conf/profiles/sWGS.config | 4 ---
nextflow.config | 19 +++--------
8 files changed, 5 insertions(+), 121 deletions(-)
delete mode 100644 conf/profiles/WES.config
delete mode 100644 conf/profiles/WGS.config
delete mode 100644 conf/profiles/copgt.config
delete mode 100644 conf/profiles/gcp.config
delete mode 100644 conf/profiles/s3_ugent.config
delete mode 100644 conf/profiles/sWGS.config
diff --git a/conf/base.config b/conf/base.config
index 60cf57dd..ff798214 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -13,33 +13,27 @@ process {
cpus = { 1 * task.attempt }
memory = { 8.GB * task.attempt }
time = { 4.h * task.attempt }
- machineType = 'template://gen-nfbatch-dev-small' // e2-standard-4
-
errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
maxRetries = 3
maxErrors = '-1'
// Process-specific resource requirements
withLabel:process_single {
- machineType = 'template://gen-nfbatch-dev-small' // e2-standard-4
cpus = { 1 }
memory = { 8.GB * task.attempt }
time = { 4.h * task.attempt }
}
withLabel:process_low {
- machineType = 'template://gen-nfbatch-dev-small' // e2-standard-4
cpus = { 2 * task.attempt }
memory = { 16.GB * task.attempt }
time = { 4.h * task.attempt }
}
withLabel:process_medium {
- machineType = 'template://gen-nfbatch-dev-medium' // n2-highmem-8
cpus = { 8 * task.attempt }
memory = { 64.GB * task.attempt }
time = { 8.h * task.attempt }
}
withLabel:process_high {
- machineType = 'template://gen-nfbatch-dev-large' // n2-highmem-16
cpus = { 16 * task.attempt }
memory = { 128.GB * task.attempt }
time = { 16.h * task.attempt }
diff --git a/conf/profiles/WES.config b/conf/profiles/WES.config
deleted file mode 100644
index 2fd529a8..00000000
--- a/conf/profiles/WES.config
+++ /dev/null
@@ -1,6 +0,0 @@
-params {
- run_coverage = true
- disable_picard_metrics = false
- roi = "${params.igenomes_base}/Hsapiens/GRCh38/regions/CMGG_WES_analysis_ROI_v7.bed"
- genelists = "${params.igenomes_base}/Hsapiens/GRCh38/regions/genelists"
-}
diff --git a/conf/profiles/WGS.config b/conf/profiles/WGS.config
deleted file mode 100644
index 657f8ec7..00000000
--- a/conf/profiles/WGS.config
+++ /dev/null
@@ -1,6 +0,0 @@
-params {
- markdup = "samtools"
- umi_aware = true
- run_coverage = true
- disable_picard_metrics = false
-}
diff --git a/conf/profiles/copgt.config b/conf/profiles/copgt.config
deleted file mode 100644
index 67fd693b..00000000
--- a/conf/profiles/copgt.config
+++ /dev/null
@@ -1,13 +0,0 @@
-params {
- run_coverage = true
- disable_picard_metrics = true
- roi = "${params.igenomes_base}/Hsapiens/GRCh38/regions/CMGG_coPGT-M_analyses_ROI_v1.bed"
-
- // trimming options
- skip_trimming = false
- trim_front = 6
- adapter_R1 = "CAGATC"
-
- // markduplicates options
- markdup = false
-}
diff --git a/conf/profiles/gcp.config b/conf/profiles/gcp.config
deleted file mode 100644
index cd2ebcba..00000000
--- a/conf/profiles/gcp.config
+++ /dev/null
@@ -1,63 +0,0 @@
-// Tweaked resources for GCP
-
-process {
- executor = 'google-batch'
- disk = 100.GB
- time = 24.h
- errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
- maxRetries = 5
-
- // tentative fix for `cannot stat` error
- // https://github.com/nextflow-io/nextflow/issues/6213#issuecomment-3173533808
- stageOutMode = 'copy'
-
- // BCL convert resources
- withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' {
- machineType = 'template://gen-nfbatch-dev-xlarge' // n2-highmem-32, 1TB disk
- cpus = 32
- memory = { 64.GB * task.attempt }
- disk = { 1.TB * task.attempt }
- }
-
- // Trimming resources
- // withName: '.*FASTP' {}
-
- // Alignment resources
- // DNA
- // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {}
- // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:BWAMEM.*_MEM' {}
- // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:DRAGMAP_ALIGN' {}
- // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:STROBEALIGN' {}
- // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {}
- // RNA
- // withName: '.*FASTQ_TO_CRAM:FASTQ_ALIGN_RNA:STAR_ALIGN' {}
-
- // Alignment post-processing resources
- withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORMADUP' {
- machineType = 'template://gen-nfbatch-dev-medium' // n2-highmem-8, 100GB disk
- disk = { input instanceof List ? input.sum { it.size() } * 3 * task.attempt : input.size() * 3 * task.attempt }
- time = 24.h
- }
- withName: '.*FASTQ_TO_CRAM:SAMTOOLS_SORT' {
- machineType = 'template://gen-nfbatch-dev-medium' // n2-highmem-8, 100GB disk
- disk = { input instanceof List ? input.sum { it.size() } * 3 * task.attempt : input.size() * 3 * task.attempt }
- time = 24.h
- }
- // withName: '.*FASTQ_TO_CRAM:BIOBAMBAM_BAMSORMADUP' {}
- // withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {}
-
- // Coverage QC resources
- // withName: '.*COVERAGE:MOSDEPTH' {}
- // withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {}
- // withName: '.*COVERAGE:PANELCOVERAGE' {}
-
- // Bam QC resources
- // withName: '.*BAM_QC:SAMTOOLS_.*$' {}
- withName: '.*BAM_QC:PICARD_.*$' {
- time = 24.h
- }
-
- // Misc resources
- // withName: '.*MD5SUM' {}
- // withName: '.*MULTIQC_.*$' {}
-}
diff --git a/conf/profiles/s3_ugent.config b/conf/profiles/s3_ugent.config
deleted file mode 100644
index 7e2fe67a..00000000
--- a/conf/profiles/s3_ugent.config
+++ /dev/null
@@ -1,9 +0,0 @@
-aws {
- profile = "ugent"
- client {
- endpoint = "https://s3.ugent.be"
- protocol = "https"
- s3PathStyleAccess = true
- connectionTimeout = 60000
- }
-}
diff --git a/conf/profiles/sWGS.config b/conf/profiles/sWGS.config
deleted file mode 100644
index 4497e094..00000000
--- a/conf/profiles/sWGS.config
+++ /dev/null
@@ -1,4 +0,0 @@
-params {
- run_coverage = false
- disable_picard_metrics = true
-}
diff --git a/nextflow.config b/nextflow.config
index f3ec3448..2787bdd6 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -57,8 +57,8 @@ params {
config_profile_name = null
config_profile_description = null
- custom_config_version = 'master'
- custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
+ custom_config_version = 'main'
+ custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.custom_config_version}"
config_profile_contact = null
config_profile_url = null
@@ -184,26 +184,17 @@ profiles {
}
test { includeConfig 'conf/test.config' }
test_full { includeConfig 'conf/test_full.config' }
- // resource profiles
- gcp { includeConfig 'conf/profiles/gcp.config' }
- s3_ugent { includeConfig 'conf/profiles/s3_ugent.config' }
- // analysis profiles
- sWGS { includeConfig 'conf/profiles/sWGS.config' }
- WGS { includeConfig 'conf/profiles/WGS.config' }
- WES { includeConfig 'conf/profiles/WES.config' }
- copgt { includeConfig 'conf/profiles/copgt.config' }
}
// Load nf-core custom profiles from different institutions
// If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included.
// Load nf-cmgg/preprocessing custom profiles from different institutions.
-includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null"
+// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null"
-// Load nf-cmgg/preprocessing custom profiles from different institutions.
-// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs
-// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
+// Load nf-cmgg/preprocessing custom profiles.
+includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile
// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled
From 8cfdd7865553e4b2ea99a16050782e8ba3e39bcf Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 6 Feb 2026 16:40:12 +0100
Subject: [PATCH 137/228] fix linting
---
.nf-core.yml | 4 +---
nextflow_schema.json | 8 ++++----
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/.nf-core.yml b/.nf-core.yml
index a9c2a6ae..b17c6d97 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -20,9 +20,7 @@ lint:
merge_markers:
- bin/cmgg_genelists
multiqc_config: false
- nextflow_config:
- - manifest.name
- - manifest.homePage
+ nextflow_config: false
template_strings:
- bin/cmgg_genelists
nf_test_content: false
diff --git a/nextflow_schema.json b/nextflow_schema.json
index efbaa2c0..19a00a3f 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -136,16 +136,16 @@
"custom_config_version": {
"type": "string",
"description": "Git commit id for Institutional configs.",
- "default": "master",
+ "default": "main",
"hidden": true,
"fa_icon": "fas fa-users-cog"
},
"custom_config_base": {
"type": "string",
- "description": "Base directory for Institutional configs.",
- "default": "https://raw.githubusercontent.com/nf-core/configs/master",
+ "description": "Base directory for custom configs.",
+ "default": "https://raw.githubusercontent.com/nf-cmgg/configs/main",
"hidden": true,
- "help_text": "If 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.",
+ "help_text": "If 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.",
"fa_icon": "fas fa-users-cog"
},
"config_profile_name": {
From 2b0370b736ac9de3e7e250b6724a3eeaa22c89e5 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 6 Feb 2026 16:53:58 +0100
Subject: [PATCH 138/228] fix snaps
---
tests/workflows/preprocessing.nf.test.snap | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 15d55f4e..0bdfd83c 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -394,7 +394,7 @@
"test_data"
],
"multiqc_library_plots": [
- "test_plots"
+
],
"multiqc_library_report": [
"test.html"
@@ -853,7 +853,7 @@
"test_data"
],
"multiqc_library_plots": [
- "test_plots"
+
],
"multiqc_library_report": [
"test.html"
@@ -1336,7 +1336,7 @@
"test_data"
],
"multiqc_library_plots": [
- "test_plots"
+
],
"multiqc_library_report": [
"test.html"
From 2b03d68f379b257954bbb8fd436a1106040cce1b Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 13:50:29 +0100
Subject: [PATCH 139/228] nf-cmgg/configs fix
---
nextflow.config | 23 +++++++++++++++-----
nextflow_schema.json | 51 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 69 insertions(+), 5 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 2787bdd6..6a275948 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -57,11 +57,20 @@ params {
config_profile_name = null
config_profile_description = null
- custom_config_version = 'main'
- custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.custom_config_version}"
+ custom_config_version = 'master'
+ custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
config_profile_contact = null
config_profile_url = null
+ // CMGG Config options
+ cmgg_config_profile_name = null
+ cmgg_config_profile_description = null
+
+ cmgg_custom_config_version = 'main'
+ cmgg_custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.cmgg_custom_config_version}"
+ cmgg_config_profile_contact = null
+ cmgg_config_profile_url = null
+
// Schema validation default options
validate_params = true
}
@@ -190,11 +199,15 @@ profiles {
// If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included.
// Load nf-cmgg/preprocessing custom profiles from different institutions.
-// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null"
+includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null"
-// Load nf-cmgg/preprocessing custom profiles.
-includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
+// Load nf-cmgg/preprocessing custom profiles from different institutions.
+// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs
+// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
+
+// Load nf-cmgg/preprocessing custom profiles from nf-cmgg/configs.
+includeConfig params.cmgg_custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.cmgg_custom_config_base.startsWith('http')) ? "${params.cmgg_custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile
// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 19a00a3f..63d39f34 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -174,6 +174,54 @@
}
}
},
+ "cmgg_institutional_config_options": {
+ "title": "nf-cmgg config options",
+ "type": "object",
+ "fa_icon": "fas fa-university",
+ "description": "Parameters used to describe centralised config profiles. These should not be edited.",
+ "help_text": "The centralised nf-cmgg configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.",
+ "properties": {
+ "cmgg_custom_config_version": {
+ "type": "string",
+ "description": "Git commit id for nf-cmgg configs.",
+ "default": "master",
+ "hidden": true,
+ "fa_icon": "fas fa-users-cog"
+ },
+ "cmgg_custom_config_base": {
+ "type": "string",
+ "description": "Base directory for nf-cmgg configs.",
+ "default": "https://raw.githubusercontent.com/nf-cmgg/configs/master",
+ "hidden": true,
+ "help_text": "If 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.",
+ "fa_icon": "fas fa-users-cog"
+ },
+ "cmgg_config_profile_name": {
+ "type": "string",
+ "description": "nf-cmgg config name.",
+ "hidden": true,
+ "fa_icon": "fas fa-users-cog"
+ },
+ "cmgg_config_profile_description": {
+ "type": "string",
+ "description": "nf-cmgg config description.",
+ "hidden": true,
+ "fa_icon": "fas fa-users-cog"
+ },
+ "cmgg_config_profile_contact": {
+ "type": "string",
+ "description": "nf-cmgg config contact information.",
+ "hidden": true,
+ "fa_icon": "fas fa-users-cog"
+ },
+ "cmgg_config_profile_url": {
+ "type": "string",
+ "description": "nf-cmgg config URL link.",
+ "hidden": true,
+ "fa_icon": "fas fa-users-cog"
+ }
+ }
+ },
"generic_options": {
"title": "Generic options",
"type": "object",
@@ -315,6 +363,9 @@
{
"$ref": "#/$defs/institutional_config_options"
},
+ {
+ "$ref": "#/$defs/cmgg_institutional_config_options"
+ },
{
"$ref": "#/$defs/generic_options"
}
From 926ab4988da1a40bb7b09b7cf75b5524638c0523 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 14:21:32 +0100
Subject: [PATCH 140/228] bump version to 3.0.0dev
---
.nf-core.yml | 5 ++-
CHANGELOG.md | 2 +-
nextflow.config | 2 +-
ro-crate-metadata.json | 79 +++++++++++++++++++++++++++++++++++++-----
4 files changed, 75 insertions(+), 13 deletions(-)
diff --git a/.nf-core.yml b/.nf-core.yml
index b17c6d97..e1b35ad2 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -28,12 +28,11 @@ nf_core_version: 3.5.2
repository_type: pipeline
template:
author: Matthias De Smet, Nicolas Vannieuwkerke
- description: Demultiplexing, adapter trimming, alignment, and coverage calculation
- for NGS data.
+ description: Demultiplexing, adapter trimming, alignment, and coverage calculation for NGS data.
force: false
is_nfcore: false
name: preprocessing
org: nf-cmgg
outdir: .
skip_features: ["fastqc"]
- version: 2.1.0dev
+ version: 3.0.0dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index def4121f..4963ab44 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## 2.1.0dev
+## 3.0.0dev
- Update the output handling to use the new workflow output definitions.
- Bump all modules to latest versions.
diff --git a/nextflow.config b/nextflow.config
index 6a275948..2beb9d9e 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -288,7 +288,7 @@ manifest {
mainScript = 'main.nf'
defaultBranch = 'main'
nextflowVersion = '!>=25.10.0'
- version = '2.1.0dev'
+ version = '3.0.0dev'
doi = ''
}
diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json
index 55c3e77d..1d3d46af 100644
--- a/ro-crate-metadata.json
+++ b/ro-crate-metadata.json
@@ -22,24 +22,36 @@
"@id": "./",
"@type": "Dataset",
"creativeWorkStatus": "InProgress",
- "datePublished": "2025-11-13T15:11:21+00:00",
+ "datePublished": "2026-02-09T13:16:20+00:00",
"description": "# nf-cmgg/preprocessing\n\n[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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\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"
},
+ {
+ "@id": "docs/images/metro_map.png"
+ },
{
"@id": "assets/"
},
+ {
+ "@id": "bin/"
+ },
{
"@id": "conf/"
},
{
"@id": "docs/"
},
+ {
+ "@id": "docs/images/"
+ },
{
"@id": "modules/"
},
+ {
+ "@id": "modules/local/"
+ },
{
"@id": "modules/nf-core/"
},
@@ -93,7 +105,7 @@
},
"mentions": [
{
- "@id": "#3be06551-eaa0-4c8e-8ad8-cf70f05fb90c"
+ "@id": "#e939b96d-700d-40a2-9ff8-added4e0ade4"
}
],
"name": "nf-cmgg/preprocessing"
@@ -120,9 +132,20 @@
"SoftwareSourceCode",
"ComputationalWorkflow"
],
+ "creator": [
+ {
+ "@id": "https://orcid.org/0000-0003-2555-3114"
+ },
+ {
+ "@id": "https://orcid.org/0009-0003-5619-1555"
+ }
+ ],
"dateCreated": "",
- "dateModified": "2025-11-13T16:11:21Z",
+ "dateModified": "2026-02-09T14:16:20Z",
"dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/",
+ "image": {
+ "@id": "docs/images/metro_map.png"
+ },
"keywords": [
"nf-core",
"nextflow"
@@ -130,6 +153,11 @@
"license": [
"MIT"
],
+ "maintainer": [
+ {
+ "@id": "https://orcid.org/0000-0003-2555-3114"
+ }
+ ],
"name": [
"nf-cmgg/preprocessing"
],
@@ -144,7 +172,7 @@
"https://nf-co.re/nf-cmgg/preprocessing/dev/"
],
"version": [
- "2.1.0dev"
+ "3.0.0dev"
]
},
{
@@ -157,14 +185,22 @@
"url": {
"@id": "https://www.nextflow.io/"
},
- "version": "!>=25.04.0"
+ "version": "!>=25.10.0"
},
{
- "@id": "#3be06551-eaa0-4c8e-8ad8-cf70f05fb90c",
+ "@id": "docs/images/metro_map.png",
+ "@type": [
+ "File",
+ "ImageObject"
+ ],
+ "name": "Workflow diagram"
+ },
+ {
+ "@id": "#e939b96d-700d-40a2-9ff8-added4e0ade4",
"@type": "TestSuite",
"instance": [
{
- "@id": "#4d67a865-3114-4fc8-94e4-c36091fb7276"
+ "@id": "#a6c6a5a5-b7e8-4825-8dce-3f467dbc2c91"
}
],
"mainEntity": {
@@ -173,7 +209,7 @@
"name": "Test suite for nf-cmgg/preprocessing"
},
{
- "@id": "#4d67a865-3114-4fc8-94e4-c36091fb7276",
+ "@id": "#a6c6a5a5-b7e8-4825-8dce-3f467dbc2c91",
"@type": "TestInstance",
"name": "GitHub Actions workflow for testing nf-cmgg/preprocessing",
"resource": "repos/nf-cmgg/preprocessing/actions/workflows/nf-test.yml",
@@ -195,6 +231,11 @@
"@type": "Dataset",
"description": "Additional files"
},
+ {
+ "@id": "bin/",
+ "@type": "Dataset",
+ "description": "Scripts that must be callable from a pipeline process"
+ },
{
"@id": "conf/",
"@type": "Dataset",
@@ -205,11 +246,21 @@
"@type": "Dataset",
"description": "Markdown files for documenting the pipeline"
},
+ {
+ "@id": "docs/images/",
+ "@type": "Dataset",
+ "description": "Images for the documentation files"
+ },
{
"@id": "modules/",
"@type": "Dataset",
"description": "Modules used by the pipeline"
},
+ {
+ "@id": "modules/local/",
+ "@type": "Dataset",
+ "description": "Pipeline-specific modules"
+ },
{
"@id": "modules/nf-core/",
"@type": "Dataset",
@@ -290,6 +341,18 @@
"@type": "Organization",
"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"
}
]
}
\ No newline at end of file
From f1d78fe1e2a404a5e2f7d6e4ff8a8cbe89f98f36 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 15:20:21 +0100
Subject: [PATCH 141/228] deprecate global analysis params in favor of per
sample settings
---
CHANGELOG.md | 4 +
assets/schema_input.json | 80 ++++++--
assets/schema_sampleinfo.json | 70 ++++++-
main.nf | 2 -
.../picard/collectmultiplemetrics/main.nf | 4 +-
nextflow.config | 10 -
nextflow_schema.json | 51 -----
subworkflows/local/bam_qc/main.nf | 70 +++----
.../local/fastq_to_aligned_cram/main.nf | 79 ++++----
workflows/preprocessing.nf | 191 +++++-------------
10 files changed, 260 insertions(+), 301 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4963ab44..aeda298e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Drop support for unaligned cram outputs.
- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
- Drop support for global `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
+- Drop support for global `markdup` and `umi_aware` parameters. Marking duplicates must now be specified per sample in the sample sheet or sample info.
+- Drop support for global `run_coverage` and `disable_picard_metrics` parameters. Running coverage analysis must now be specified per sample in the sample sheet or sample info.
+- Drop support for global `skip_trimming`, `trim_front`, `trim_tail`, `adapter_R1` and `adapter_R2` parameters. Trimming must now be specified per sample in the sample sheet or sample info.
+- Drop support for global `roi` parameter. Regions of interest must now be specified per sample in the sample sheet or sample info.
- Simplify fastq sharding and make it user configurable via the `split_fastq` parameter.
- Added splice junctions and junctions outputs for RNA-seq alignments using STAR.
diff --git a/assets/schema_input.json b/assets/schema_input.json
index 7eab645d..59ee5046 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -37,7 +37,71 @@
"meta": ["aligner"],
"type": ["string", "boolean"],
"description": "Aligner to use to align sample to the reference genome",
- "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false]
+ "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false],
+ "default": "false"
+ },
+ "markdup": {
+ "meta": ["markdup"],
+ "type": ["string", "boolean"],
+ "description": "Mark duplicates tool to use",
+ "enum": ["bamsormadup", "samtools", "false", false],
+ "default": "bamsormadup"
+ },
+ "umi_aware": {
+ "meta": ["umi_aware"],
+ "type": "boolean",
+ "description": "Run markdup in UMI-aware mode. This applies to Samtools only and requires the UMI to be in the read name.",
+ "default": false
+ },
+ "skip_trimming": {
+ "meta": ["skip_trimming"],
+ "type": "boolean",
+ "description": "Skip adapter trimming",
+ "default": false
+ },
+ "trim_front": {
+ "meta": ["trim_front"],
+ "type": "integer",
+ "description": "Number of bases to trim from the front of each read",
+ "default": 0
+ },
+ "trim_tail": {
+ "meta": ["trim_tail"],
+ "type": "integer",
+ "description": "Number of bases to trim from the tail of each read",
+ "default": 0
+ },
+ "adapter_R1": {
+ "meta": ["adapter_R1"],
+ "type": "string",
+ "description": "Adapter sequence to trim from read 1",
+ "default": null
+ },
+ "adapter_R2": {
+ "meta": ["adapter_R2"],
+ "type": "string",
+ "description": "Adapter sequence to trim from read 2",
+ "default": null
+ },
+ "run_coverage": {
+ "meta": ["run_coverage"],
+ "type": "boolean",
+ "description": "Whether to run coverage analysis for the sample",
+ "default": false
+ },
+ "disable_picard_metrics": {
+ "meta": ["disable_picard_metrics"],
+ "type": "boolean",
+ "description": "Whether to disable Picard metrics calculation. This can be used to speed up processing if Picard is not needed.",
+ "default": true
+ },
+ "roi": {
+ "meta": ["roi"],
+ "type": "string",
+ "format": "file-path",
+ "description": "Region of interest BED file for coverage analysis",
+ "pattern": "^\\S+\\.bed$",
+ "default": null
},
"tag": {
"meta": ["tag"],
@@ -45,12 +109,6 @@
"description": "Sample tag",
"pattern": "^[a-zA-Z0-9_-]+$"
},
- "purpose": {
- "meta": ["purpose"],
- "type": "string",
- "description": "Sample purpose, can be either 'research' or 'diagnostic'",
- "enum": ["research", "diagnostic"]
- },
"sample_type": {
"meta": ["sample_type"],
"type": "string",
@@ -64,14 +122,6 @@
"pattern": "^[a-zA-Z0-9_-]+$",
"description": "Sample library name"
},
- "roi": {
- "meta": ["roi"],
- "type": "string",
- "format": "file-path",
- "description": "Region of interest BED file for coverage analysis",
- "pattern": "^\\S+\\.bed$",
- "default": null
- },
"lane": {
"type": "integer",
"meta": ["lane"],
diff --git a/assets/schema_sampleinfo.json b/assets/schema_sampleinfo.json
index bac6789d..26bb486a 100644
--- a/assets/schema_sampleinfo.json
+++ b/assets/schema_sampleinfo.json
@@ -73,19 +73,75 @@
"type": "string"
}
},
+ "aligner": {
+ "meta": ["aligner"],
+ "type": ["string", "boolean"],
+ "description": "Aligner to use to align sample to the reference genome",
+ "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false],
+ "default": "false"
+ },
+ "markdup": {
+ "meta": ["markdup"],
+ "type": ["string", "boolean"],
+ "description": "Mark duplicates tool to use",
+ "enum": ["bamsormadup", "samtools", "false", false],
+ "default": "bamsormadup"
+ },
+ "umi_aware": {
+ "meta": ["umi_aware"],
+ "type": "boolean",
+ "description": "Run markdup in UMI-aware mode. This applies to Samtools only and requires the UMI to be in the read name.",
+ "default": false
+ },
+ "skip_trimming": {
+ "meta": ["skip_trimming"],
+ "type": "boolean",
+ "description": "Skip adapter trimming",
+ "default": false
+ },
+ "trim_front": {
+ "meta": ["trim_front"],
+ "type": "integer",
+ "description": "Number of bases to trim from the front of each read",
+ "default": 0
+ },
+ "trim_tail": {
+ "meta": ["trim_tail"],
+ "type": "integer",
+ "description": "Number of bases to trim from the tail of each read",
+ "default": 0
+ },
+ "adapter_R1": {
+ "meta": ["adapter_R1"],
+ "type": "string",
+ "description": "Adapter sequence to trim from read 1",
+ "default": null
+ },
+ "adapter_R2": {
+ "meta": ["adapter_R2"],
+ "type": "string",
+ "description": "Adapter sequence to trim from read 2",
+ "default": null
+ },
+ "run_coverage": {
+ "meta": ["run_coverage"],
+ "type": "boolean",
+ "description": "Whether to run coverage analysis for the sample",
+ "default": false
+ },
+ "disable_picard_metrics": {
+ "meta": ["disable_picard_metrics"],
+ "type": "boolean",
+ "description": "Whether to disable Picard metrics calculation. This can be used to speed up processing if Picard is not needed.",
+ "default": true
+ },
"roi": {
"meta": ["roi"],
"type": "string",
"format": "file-path",
"description": "Region of interest BED file for coverage analysis",
- "pattern": "^[a-zA-Z0-9_]+.bed$",
+ "pattern": "^\\S+\\.bed$",
"default": null
- },
- "aligner": {
- "meta": ["aligner"],
- "type": ["string", "boolean"],
- "description": "Aligner to use to align sample to the reference genome",
- "enum": ["bowtie2", "bwamem", "bwamem2", "dragmap", "snap", "strobe", "star", "false", false]
}
}
},
diff --git a/main.nf b/main.nf
index 03dfac1a..305e0e6b 100644
--- a/main.nf
+++ b/main.nf
@@ -45,8 +45,6 @@ workflow {
PREPROCESSING(
PIPELINE_INITIALISATION.out.samplesheet,
params.genomes,
- params.markdup,
- params.roi,
params.genelists,
)
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index e4d74998..765d2ce9 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -8,7 +8,7 @@ process PICARD_COLLECTMULTIPLEMETRICS {
'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }"
input:
- tuple val(meta) , path(bam), path(bai) ,path(fasta) ,path(fai)
+ tuple val(meta) , path(bam), path(bai), path(intervals), path(fasta) ,path(fai), path(dict)
output:
tuple val(meta), path("*_metrics"), emit: metrics
@@ -21,6 +21,7 @@ process PICARD_COLLECTMULTIPLEMETRICS {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
+ def intervals = intervals ? "--INTERVALS ${intervals.join(',')}" : ""
def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
def avail_mem = 3072
if (!task.memory) {
@@ -35,6 +36,7 @@ process PICARD_COLLECTMULTIPLEMETRICS {
$args \\
--INPUT $bam \\
--OUTPUT ${prefix}.CollectMultipleMetrics \\
+ $intervals \\
$reference
cat <<-END_VERSIONS > versions.yml
diff --git a/nextflow.config b/nextflow.config
index 2beb9d9e..30835d39 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -18,17 +18,7 @@ params {
igenomes_ignore = false
// Analysis options
- markdup = 'bamsormadup'
- umi_aware = false
- skip_trimming = false
split_fastq = 100000000
- trim_front = 0
- trim_tail = 0
- adapter_R1 = null
- adapter_R2 = null
- run_coverage = true
- disable_picard_metrics = false
- roi = null
genelists = null
// MultiQC options
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 63d39f34..722c57ce 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -51,27 +51,6 @@
"description": "",
"default": "",
"properties": {
- "markdup": {
- "type": "string",
- "default": "bamsormadup",
- "description": "Which alignment postprocessor to use",
- "enum": ["bamsormadup", "samtools", "false"]
- },
- "umi_aware": {
- "type": "boolean",
- "default": "false",
- "description": "Run markdup in UMI-aware mode. This applies to Samtools only and requires the UMI to be in the read name."
- },
- "run_coverage": {
- "type": "boolean",
- "description": "Run coverage analysis steps",
- "default": true
- },
- "skip_trimming": {
- "type": "boolean",
- "description": "Skip adapter trimming",
- "default": false
- },
"split_fastq": {
"type": "integer",
"oneOf": [
@@ -87,36 +66,6 @@
"description": "Specify how many reads each split of a FastQ file contains. Set 0 to turn off splitting at all.",
"help_text": "Use 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."
},
- "trim_front": {
- "type": "integer",
- "default": 0,
- "description": "Number of bases to trim from the front of the read"
- },
- "trim_tail": {
- "type": "integer",
- "default": 0,
- "description": "Number of bases to trim from the tail of the read"
- },
- "adapter_R1": {
- "type": "string",
- "default": null,
- "description": "Adapter sequence to be trimmed"
- },
- "adapter_R2": {
- "type": "string",
- "default": null,
- "description": "Adapter sequence to be trimmed"
- },
- "disable_picard_metrics": {
- "type": "boolean",
- "default": false,
- "description": "Disable the calculation of (slow) Picard metrics"
- },
- "roi": {
- "type": "string",
- "default": null,
- "description": "Region of interest for coverage analysis to be applied to all samples"
- },
"genelists": {
"type": "string",
"default": null,
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index e35555a8..4978c5dd 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -11,65 +11,57 @@ include { PICARD_COLLECTWGSMETRICS } from '../../../modules/nf-core/picard/
workflow BAM_QC {
take:
ch_bam_bai_roi_fasta_fai_dict // channel: [ val(meta), path(bam), path(bai), path(roi), path(fasta), path(fai), path(dict)]
- disable_picard // boolean
main:
ch_versions = channel.empty()
ch_bam_bai_roi_fasta_fai_dict
- .map { meta, bam, bai, _roi, fasta, _fai, _dict ->
- return [meta, bam, bai, fasta]
- }
- .set { ch_bam_bai_fasta }
-
- SAMTOOLS_STATS(ch_bam_bai_fasta)
+ .map { meta, bam, bai, _roi, fasta, _fai, _dict ->
+ return [meta, bam, bai, fasta, fai]
+ }
+ .set { ch_bam_bai_fasta_fai }
- ch_bam_bai_fasta
- .map { meta, bam, bai, _fasta ->
- return [meta, bam, bai]
- }
- .set { ch_bam_bai }
+ SAMTOOLS_STATS(ch_bam_bai_fasta_fai)
+ ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first())
- SAMTOOLS_FLAGSTAT(ch_bam_bai)
+ SAMTOOLS_FLAGSTAT(ch_bam_bai_fasta_fai)
ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions.first())
- SAMTOOLS_IDXSTATS(ch_bam_bai)
+ SAMTOOLS_IDXSTATS(ch_bam_bai_fasta_fai)
ch_versions = ch_versions.mix(SAMTOOLS_IDXSTATS.out.versions.first())
ch_picard_hsmetrics = channel.empty()
ch_picard_multiplemetrics = channel.empty()
ch_picard_multiplemetrics_pdf = channel.empty()
ch_picard_wgsmetrics = channel.empty()
- if (!disable_picard) {
- ch_bam_bai_roi_fasta_fai_dict
- .map { meta, bam, bai, _roi, fasta, fai, _dict ->
- return [meta, bam, bai, fasta, fai]
- }
- .set { ch_bam_bai_fasta_fai }
+ ch_bam_bai_roi_fasta_fai_dict
+ .filter { meta, _bam, _bai, _roi, _fasta, _fai, _dict ->
+ meta.disable_picard_metrics != true
+ }
+ .set { ch_picard }
+
+ PICARD_COLLECTMULTIPLEMETRICS(ch_picard)
+ ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first())
+ ch_picard_multiplemetrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics
+ ch_picard_multiplemetrics_pdf = PICARD_COLLECTMULTIPLEMETRICS.out.pdf
- PICARD_COLLECTMULTIPLEMETRICS(ch_bam_bai_fasta_fai)
- ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first())
- ch_picard_multiplemetrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics
- ch_picard_multiplemetrics_pdf = PICARD_COLLECTMULTIPLEMETRICS.out.pdf
+ ch_picard
+ .branch { meta, bam, bai, roi, fasta, fai, dict ->
+ hsmetrics: roi != []
+ return [meta, bam, bai, roi, fasta, fai, dict]
+ wgsmetrics: roi == []
+ return [meta, bam, bai, fasta, fai, dict]
+ .set { ch_picard_coverage } }
- ch_bam_bai_roi_fasta_fai_dict
- .branch { meta, bam, bai, roi, fasta, fai, dict ->
- hsmetrics: roi != []
- return [meta, bam, bai, roi, roi, fasta, fai, dict]
- wgsmetrics: roi == []
- return [meta, bam, bai, fasta, fai]
- }
- .set { ch_picard }
+ PICARD_COLLECTWGSMETRICS(ch_picard_coverage.wgsmetrics, [])
+ ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first())
+ ch_picard_wgsmetrics = PICARD_COLLECTWGSMETRICS.out.metrics
- PICARD_COLLECTWGSMETRICS(ch_picard.wgsmetrics, [])
- ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first())
- ch_picard_wgsmetrics = PICARD_COLLECTWGSMETRICS.out.metrics
+ PICARD_COLLECTHSMETRICS(ch_picard_coverage.hsmetrics)
+ ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first())
+ ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
- PICARD_COLLECTHSMETRICS(ch_picard.hsmetrics)
- ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first())
- ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
- }
emit:
samtools_stats = SAMTOOLS_STATS.out.stats
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index 1460d083..9d30ea92 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -20,7 +20,6 @@ include { getGenomeAttribute } from '../../local/utils_nfcore_preprocessing_p
workflow FASTQ_TO_CRAM {
take:
ch_meta_reads_aligner_index_fasta_gtf // channel: [mandatory] [meta, [fastq, ...], aligner [bowtie2, bwamem, bwamem2, dragmap, snap, star], aligner_index, fasta, gtf]
- markdup // string: [optional ] markdup [bamsormadup, samtools, false]
main:
@@ -28,10 +27,10 @@ workflow FASTQ_TO_CRAM {
ch_sormadup_metrics = channel.empty()
/*
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // STEP: ALIGNMENT
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // STEP: ALIGNMENT
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
ch_meta_reads_aligner_index_fasta_gtf.dump(tag: "FASTQ_TO_CRAM: reads to align", pretty: true)
@@ -39,7 +38,8 @@ workflow FASTQ_TO_CRAM {
.branch { meta, reads, aligner, index, fasta, gtf ->
rna: meta.sample_type == "RNA"
return [meta, reads, "star", getGenomeAttribute(meta.genome_data, 'star'), gtf]
- dna: meta.sample_type == "DNA" || meta.sample_type == "Tissue"
+ dna: true // catch all non-RNA samples as DNA, as some may be missing sample_type or have other sample types (e.g. tissue, cell line, etc.) that should be aligned with the DNA aligner
+ //dna: meta.sample_type == "DNA" || meta.sample_type == "Tissue"
return [meta, reads, aligner, index, fasta]
}
.set { ch_meta_reads_aligner_index_fasta_datatype }
@@ -58,10 +58,10 @@ workflow FASTQ_TO_CRAM {
ch_versions = ch_versions.mix(FASTQ_ALIGN_DNA.out.versions)
/*
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // STEP: MARK DUPLICATES
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // STEP: MARK DUPLICATES
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
FASTQ_ALIGN_DNA.out.bam
.mix(FASTQ_ALIGN_RNA.out.bam)
@@ -90,40 +90,45 @@ workflow FASTQ_TO_CRAM {
.map { meta, files ->
return [meta, files.flatten(), getGenomeAttribute(meta.genome_data, 'fasta')]
}
+ .dump(tag: "FASTQ_TO_CRAM: aligned bam per sample", pretty: true)
+ .branch { meta, files, fasta ->
+ bamsormadup: meta.markdup == "bamsormadup"
+ return [meta, files, fasta]
+ samtools: meta.markdup == "samtools"
+ return [meta, files, fasta]
+ sort: meta.markdup == "false" || meta.markdup == false
+ return [meta, files, fasta]
+ unknown: true
+ error("markdup option ${meta.markdup} not supported")
+ }
.set { ch_bam_fasta }
- ch_bam_fasta.dump(tag: "FASTQ_TO_CRAM: aligned bam per sample", pretty: true)
ch_markdup_index = channel.empty()
- if (markdup == "bamsormadup") {
- // BIOBAMBAM_BAMSORMADUP([meta, [bam, bam]], fasta)
- BIOBAMBAM_BAMSORMADUP(ch_bam_fasta)
- ch_markdup_index = ch_markdup_index.mix(BIOBAMBAM_BAMSORMADUP.out.bam.join(BIOBAMBAM_BAMSORMADUP.out.bam_index, failOnMismatch: true, failOnDuplicate: true))
- ch_sormadup_metrics = ch_sormadup_metrics.mix(BIOBAMBAM_BAMSORMADUP.out.metrics)
- ch_versions = ch_versions.mix(BIOBAMBAM_BAMSORMADUP.out.versions.first())
- }
- else if (markdup == "samtools") {
- SAMTOOLS_SORMADUP(ch_bam_fasta)
- ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORMADUP.out.cram.join(SAMTOOLS_SORMADUP.out.crai, failOnMismatch: true, failOnDuplicate: true))
- ch_sormadup_metrics = ch_sormadup_metrics.mix(SAMTOOLS_SORMADUP.out.metrics)
- ch_versions = ch_versions.mix(SAMTOOLS_SORMADUP.out.versions.first())
- }
- else if (markdup == "false" || markdup == false) {
- // Merge bam files and compress
- // SAMTOOLS_SORT([meta, [bam, bam], fasta],index_format)
- SAMTOOLS_SORT(ch_bam_fasta, "crai")
- ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORT.out.cram.join(SAMTOOLS_SORT.out.crai, failOnMismatch: true, failOnDuplicate: true))
- }
- else {
- error("markdup: ${markdup} not supported")
- }
+ // BIOBAMBAM_BAMSORMADUP([meta, [bam, bam]], fasta)
+ BIOBAMBAM_BAMSORMADUP(ch_bam_fasta.bamsormadup)
+ ch_markdup_index = ch_markdup_index.mix(BIOBAMBAM_BAMSORMADUP.out.bam.join(BIOBAMBAM_BAMSORMADUP.out.bam_index, failOnMismatch: true, failOnDuplicate: true))
+ ch_sormadup_metrics = ch_sormadup_metrics.mix(BIOBAMBAM_BAMSORMADUP.out.metrics)
+ ch_versions = ch_versions.mix(BIOBAMBAM_BAMSORMADUP.out.versions.first())
+
+ // SAMTOOLS_SORMADUP([meta, [bam, bam]], fasta)
+ SAMTOOLS_SORMADUP(ch_bam_fasta.samtools)
+ ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORMADUP.out.cram.join(SAMTOOLS_SORMADUP.out.crai, failOnMismatch: true, failOnDuplicate: true))
+ ch_sormadup_metrics = ch_sormadup_metrics.mix(SAMTOOLS_SORMADUP.out.metrics)
+ ch_versions = ch_versions.mix(SAMTOOLS_SORMADUP.out.versions.first())
+
+ // Merge bam files and compress
+ // SAMTOOLS_SORT([meta, [bam, bam], fasta],index_format)
+ SAMTOOLS_SORT(ch_bam_fasta.sort, "crai")
+ ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORT.out.cram.join(SAMTOOLS_SORT.out.crai, failOnMismatch: true, failOnDuplicate: true))
+
ch_markdup_index.dump(tag: "FASTQ_TO_CRAM: postprocessed bam", pretty: true)
/*
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- // COMPRESSION
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ // COMPRESSION
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
ch_markdup_index
.branch { meta, reads, index ->
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 6d2802eb..3b22a329 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -37,8 +37,6 @@ workflow PREPROCESSING {
take:
ch_samplesheet // channel: samplesheet read in from --input
genomes // map: genome reference files
- markdup // string: markdup method to use
- roi // file: regions of interest bed file to be applied to all samples
genelists // file: directory containing genelist bed files for coverage analysis
main:
@@ -55,9 +53,6 @@ workflow PREPROCESSING {
error("Unable to determine input type, please check inputs")
}
.set { ch_inputs_from_samplesheet }
-
- roi = roi ? file(roi, checkIfExists: true) : null
-
genelists = genelists ? channel.value(file(genelists + "/*.bed", checkIfExists: true)) : channel.empty()
/*
@@ -164,19 +159,6 @@ workflow PREPROCESSING {
else {
meta = meta + ["genome_data": [:]]
}
-
- // set the ROI
- // // Special case for coPGT samples
- // // if there's no global ROI AND no sample speficic ROI
- // // AND the sample tag is "coPGT-M", set the sample ROI to "roi_copgt"
- if (!roi && !meta.roi && meta.tag == "coPGT-M") {
- meta = meta + ["roi": getGenomeAttribute(meta.genome_data, "roi_copgt")]
- }
- // // if there's a global ROI AND no sample specific ROI
- // // set the global ROI to the sample
- if (roi && !meta.roi) {
- meta = meta + ["roi": roi]
- }
return [meta, reads]
}
.map { meta, reads -> [meta.samplename, [meta, reads]] }
@@ -248,130 +230,61 @@ workflow PREPROCESSING {
.set { ch_meta_reads_aligner_index_fasta_gtf }
FASTQ_TO_CRAM(
- ch_meta_reads_aligner_index_fasta_gtf,
- markdup,
+ ch_meta_reads_aligner_index_fasta_gtf
)
ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics)
ch_versions = ch_versions.mix(FASTQ_TO_CRAM.out.versions)
-
- /*
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-// STEP: FILTER SAMPLES WITH 'SNP' TAG
-// samples with SNP tag contain only data for sample tracking
-// and as such don't need all the QC steps
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*/
-
- FASTQ_TO_CRAM.out.cram_crai
- .filter { meta, _cram, _crai ->
- meta.tag != "SNP"
- }
- .set { ch_no_snp_samples }
-
- /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: COVERAGE ANALYSIS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
- ch_no_snp_samples
- .map { meta, cram, crai ->
- if (meta.roi) {
- return [
- meta,
- cram,
- crai,
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "fai"),
- file(meta.roi, checkIfExists: true),
- ]
- }
- else {
- return [
- meta,
- cram,
- crai,
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "fai"),
- [],
- ]
- }
- }
- .set { ch_cram_crai_fasta_fai_roi }
-
- def mosdepth_global_out = channel.empty()
- def mosdepth_summary_out = channel.empty()
- def mosdepth_regions_out = channel.empty()
- def mosdepth_per_base_d4_out = channel.empty()
- def mosdepth_per_base_bed_out = channel.empty()
- def mosdepth_per_base_csi_out = channel.empty()
- def mosdepth_regions_bed_out = channel.empty()
- def mosdepth_regions_csi_out = channel.empty()
- def mosdepth_quantized_bed_out = channel.empty()
- def mosdepth_quantized_csi_out = channel.empty()
- def mosdepth_thresholds_bed_out = channel.empty()
- def mosdepth_thresholds_csi_out = channel.empty()
- def samtools_coverage_out = channel.empty()
- def panelcoverage_out = channel.empty()
- if (params.run_coverage) {
- COVERAGE(ch_cram_crai_fasta_fai_roi, genelists)
- ch_multiqc_files = ch_multiqc_files.mix(
- COVERAGE.out.mosdepth_summary,
- COVERAGE.out.mosdepth_global,
- COVERAGE.out.mosdepth_regions,
- COVERAGE.out.samtools_coverage,
- )
- mosdepth_global_out = COVERAGE.out.mosdepth_global
- mosdepth_summary_out = COVERAGE.out.mosdepth_summary
- mosdepth_regions_out = COVERAGE.out.mosdepth_regions
- mosdepth_per_base_d4_out = COVERAGE.out.mosdepth_per_base_d4
- mosdepth_per_base_bed_out = COVERAGE.out.mosdepth_per_base_bed
- mosdepth_per_base_csi_out = COVERAGE.out.mosdepth_per_base_csi
- mosdepth_regions_bed_out = COVERAGE.out.mosdepth_regions_bed
- mosdepth_regions_csi_out = COVERAGE.out.mosdepth_regions_csi
- mosdepth_quantized_bed_out = COVERAGE.out.mosdepth_quantized_bed
- mosdepth_quantized_csi_out = COVERAGE.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed_out = COVERAGE.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi_out = COVERAGE.out.mosdepth_thresholds_csi
- samtools_coverage_out = COVERAGE.out.samtools_coverage
- panelcoverage_out = COVERAGE.out.panelcoverage
- ch_versions = ch_versions.mix(COVERAGE.out.versions)
+ FASTQ_TO_CRAM.out.cram_crai
+ .filter { meta, _cram, _crai ->
+ meta.run_coverage.toBoolean() == true
+ }
+ .map { meta, cram, crai ->
+ return [
+ meta,
+ cram,
+ crai,
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "fai"),
+ meta.roi ? file(meta.roi, checkIfExists: true) : [],
+ ]
}
+ .set { ch_cram_crai_fasta_fai_roi }
+
+ COVERAGE(ch_cram_crai_fasta_fai_roi, genelists)
+ ch_multiqc_files = ch_multiqc_files.mix(
+ COVERAGE.out.mosdepth_summary,
+ COVERAGE.out.mosdepth_global,
+ COVERAGE.out.mosdepth_regions,
+ COVERAGE.out.samtools_coverage,
+ )
+ ch_versions = ch_versions.mix(COVERAGE.out.versions)
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: QC FOR ALIGNMENTS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
- ch_no_snp_samples
- .map { meta, cram, crai ->
- if (meta.roi) {
- return [
- meta,
- cram,
- crai,
- file(meta.roi, checkIfExists: true),
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "fai"),
- getGenomeAttribute(meta.genome_data, "dict"),
- ]
- }
- else {
- return [
- meta,
- cram,
- crai,
- [],
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "fai"),
- getGenomeAttribute(meta.genome_data, "dict"),
- ]
- }
- }
- .set { ch_cram_crai_roi_fasta_fai_dict }
+ FASTQ_TO_CRAM.out.cram_crai
+ .map { meta, cram, crai ->
+ return [
+ meta,
+ cram,
+ crai,
+ meta.roi ? file(meta.roi, checkIfExists: true) : [],
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "fai"),
+ getGenomeAttribute(meta.genome_data, "dict"),
+ ]
+ }
+ .set { ch_cram_crai_roi_fasta_fai_dict }
- BAM_QC(ch_cram_crai_roi_fasta_fai_dict, params.disable_picard_metrics)
+ BAM_QC(ch_cram_crai_roi_fasta_fai_dict)
ch_multiqc_files = ch_multiqc_files.mix(
BAM_QC.out.samtools_stats,
BAM_QC.out.samtools_flagstat,
@@ -492,20 +405,20 @@ workflow PREPROCESSING {
rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
align_reports = FASTQ_TO_CRAM.out.align_reports
sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = mosdepth_global_out
- mosdepth_summary = mosdepth_summary_out
- mosdepth_regions = mosdepth_regions_out
- mosdepth_per_base_d4 = mosdepth_per_base_d4_out
- mosdepth_per_base_bed = mosdepth_per_base_bed_out
- mosdepth_per_base_csi = mosdepth_per_base_csi_out
- mosdepth_regions_bed = mosdepth_regions_bed_out
- mosdepth_regions_csi = mosdepth_regions_csi_out
- mosdepth_quantized_bed = mosdepth_quantized_bed_out
- mosdepth_quantized_csi = mosdepth_quantized_csi_out
- mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
- mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
- samtools_coverage = samtools_coverage_out
- panelcoverage = panelcoverage_out
+ mosdepth_global = COVERAGE.out.mosdepth_global
+ mosdepth_summary = COVERAGE.out.mosdepth_summary
+ mosdepth_regions = COVERAGE.out.mosdepth_regions
+ mosdepth_per_base_d4 = COVERAGE.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = COVERAGE.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = COVERAGE.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = COVERAGE.out.mosdepth_regions_bed
+ mosdepth_regions_csi = COVERAGE.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = COVERAGE.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = COVERAGE.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = COVERAGE.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = COVERAGE.out.mosdepth_thresholds_csi
+ samtools_coverage = COVERAGE.out.samtools_coverage
+ panelcoverage = COVERAGE.out.panelcoverage
samtools_stats = BAM_QC.out.samtools_stats
samtools_flagstat = BAM_QC.out.samtools_flagstat
samtools_idxstats = BAM_QC.out.samtools_idxstats
From dcb2a6e1cf1f974021d49d73cebe32e54e9084b5 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 15:51:55 +0100
Subject: [PATCH 142/228] nextflow lint
---
.../picard/collectmultiplemetrics/main.nf | 8 +-
modules/nf-core/samtools/sormadup/main.nf | 3 -
subworkflows/local/bam_qc/main.nf | 5 +-
.../nf-core/utils_nfcore_pipeline/main.nf | 2 +-
workflows/preprocessing.nf | 248 +++++++++---------
5 files changed, 137 insertions(+), 129 deletions(-)
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index 765d2ce9..2dc6679d 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -21,8 +21,8 @@ process PICARD_COLLECTMULTIPLEMETRICS {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
- def intervals = intervals ? "--INTERVALS ${intervals.join(',')}" : ""
- def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
+ def intervals_cmd = intervals ? "--INTERVALS ${intervals.join(',')}" : ""
+ 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.'
@@ -36,8 +36,8 @@ process PICARD_COLLECTMULTIPLEMETRICS {
$args \\
--INPUT $bam \\
--OUTPUT ${prefix}.CollectMultipleMetrics \\
- $intervals \\
- $reference
+ $intervals_cmd \\
+ $reference_cmd
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/samtools/sormadup/main.nf b/modules/nf-core/samtools/sormadup/main.nf
index 9bc8a43b..86afb479 100644
--- a/modules/nf-core/samtools/sormadup/main.nf
+++ b/modules/nf-core/samtools/sormadup/main.nf
@@ -32,9 +32,6 @@ process SAMTOOLS_SORMADUP {
args5.contains("--output-fmt cram") ? "cram" :
"bam"
def reference = fasta ? "--reference ${fasta}" : ""
- // memory per thread for samtools sort
- // set to 50% of the memory per thread, but at least 768M (samtools default)
- def sort_memory = Math.max(768,(task.memory.mega/task.cpus*0.50).intValue())
"""
samtools cat \\
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index 4978c5dd..37ef16a7 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -16,7 +16,7 @@ workflow BAM_QC {
ch_versions = channel.empty()
ch_bam_bai_roi_fasta_fai_dict
- .map { meta, bam, bai, _roi, fasta, _fai, _dict ->
+ .map { meta, bam, bai, _roi, fasta, fai, _dict ->
return [meta, bam, bai, fasta, fai]
}
.set { ch_bam_bai_fasta_fai }
@@ -52,7 +52,8 @@ workflow BAM_QC {
return [meta, bam, bai, roi, fasta, fai, dict]
wgsmetrics: roi == []
return [meta, bam, bai, fasta, fai, dict]
- .set { ch_picard_coverage } }
+ }
+ .set { ch_picard_coverage }
PICARD_COLLECTWGSMETRICS(ch_picard_coverage.wgsmetrics, [])
ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first())
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
index bfd25876..2f30e9a4 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
@@ -98,7 +98,7 @@ def workflowVersionToYAML() {
// Get channel of software versions used in pipeline in YAML format
//
def softwareVersionsToYAML(ch_versions) {
- return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML()))
+ return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML()))
}
//
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 3b22a329..33c0930b 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,25 +7,25 @@ include { samplesheetToList } from 'plugin/nf-schema'
*/
// Modules
-include { FASTP } from '../modules/nf-core/fastp/main'
-include { MD5SUM } from '../modules/nf-core/md5sum/main'
-include { MOSDEPTH } from '../modules/nf-core/mosdepth/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 { FASTP } from '../modules/nf-core/fastp/main'
+include { MD5SUM } from '../modules/nf-core/md5sum/main'
+include { MOSDEPTH } from '../modules/nf-core/mosdepth/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'
// Subworkflows
-include { BAM_QC } from '../subworkflows/local/bam_qc/main'
-include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/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/main'
+include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
+include { COVERAGE } from '../subworkflows/local/coverage/main'
+include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
// Functions
-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 { 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'
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -36,8 +36,8 @@ include { getGenomeAttribute } from '../subworkflows/local/utils_nfco
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_versions = channel.empty()
@@ -73,7 +73,7 @@ workflow PREPROCESSING {
BCL_DEMULTIPLEX.out.fastq.dump(tag: "DEMULTIPLEX: fastq", pretty: true)
ch_multiqc_files = ch_multiqc_files.mix(
BCL_DEMULTIPLEX.out.reports,
- BCL_DEMULTIPLEX.out.stats
+ BCL_DEMULTIPLEX.out.stats,
)
ch_versions = ch_versions.mix(BCL_DEMULTIPLEX.out.versions)
@@ -178,7 +178,7 @@ workflow PREPROCESSING {
ch_fastq_per_sample.supported.dump(tag: "Supported FASTQ per sample", pretty: true)
ch_fastq_per_sample.other.dump(tag: "Other FASTQ per sample", pretty: true)
-/*
+ /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// FASTQ TRIMMING AND QC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -187,7 +187,14 @@ workflow PREPROCESSING {
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
- FASTP(ch_fastq_per_sample.supported.map{ meta, fastq -> return [meta, fastq, []] }, false, false, false)
+ FASTP(
+ ch_fastq_per_sample.supported.map { meta, fastq ->
+ return [meta, fastq, []]
+ },
+ false,
+ false,
+ false,
+ )
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
ch_versions = ch_versions.mix(FASTP.out.versions.first())
@@ -212,22 +219,23 @@ workflow PREPROCESSING {
ch_trimmed_reads.dump(tag: "Supported trimmed reads per sample", pretty: true)
-/*
+ /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: FASTQ TO ALIGNED CRAM CONVERSION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
- ch_trimmed_reads.map { meta, reads ->
- return [
- meta,
- reads,
- meta.aligner,
- getGenomeAttribute(meta.genome_data, meta.aligner),
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "gtf"),
- ]
- }
- .set { ch_meta_reads_aligner_index_fasta_gtf }
+ ch_trimmed_reads
+ .map { meta, reads ->
+ return [
+ meta,
+ reads,
+ meta.aligner,
+ getGenomeAttribute(meta.genome_data, meta.aligner),
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "gtf"),
+ ]
+ }
+ .set { ch_meta_reads_aligner_index_fasta_gtf }
FASTQ_TO_CRAM(
ch_meta_reads_aligner_index_fasta_gtf
@@ -236,25 +244,26 @@ workflow PREPROCESSING {
ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics)
ch_versions = ch_versions.mix(FASTQ_TO_CRAM.out.versions)
+ /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: COVERAGE ANALYSIS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
FASTQ_TO_CRAM.out.cram_crai
- .filter { meta, _cram, _crai ->
- meta.run_coverage.toBoolean() == true
- }
- .map { meta, cram, crai ->
- return [
- meta,
- cram,
- crai,
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "fai"),
- meta.roi ? file(meta.roi, checkIfExists: true) : [],
- ]
- }
- .set { ch_cram_crai_fasta_fai_roi }
+ .filter { meta, _cram, _crai ->
+ meta.run_coverage.toBoolean()
+ }
+ .map { meta, cram, crai ->
+ return [
+ meta,
+ cram,
+ crai,
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "fai"),
+ meta.roi ? file(meta.roi, checkIfExists: true) : [],
+ ]
+ }
+ .set { ch_cram_crai_fasta_fai_roi }
COVERAGE(ch_cram_crai_fasta_fai_roi, genelists)
ch_multiqc_files = ch_multiqc_files.mix(
@@ -271,18 +280,18 @@ workflow PREPROCESSING {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
FASTQ_TO_CRAM.out.cram_crai
- .map { meta, cram, crai ->
- return [
- meta,
- cram,
- crai,
- meta.roi ? file(meta.roi, checkIfExists: true) : [],
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "fai"),
- getGenomeAttribute(meta.genome_data, "dict"),
- ]
- }
- .set { ch_cram_crai_roi_fasta_fai_dict }
+ .map { meta, cram, crai ->
+ return [
+ meta,
+ cram,
+ crai,
+ meta.roi ? file(meta.roi, checkIfExists: true) : [],
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "fai"),
+ getGenomeAttribute(meta.genome_data, "dict"),
+ ]
+ }
+ .set { ch_cram_crai_roi_fasta_fai_dict }
BAM_QC(ch_cram_crai_roi_fasta_fai_dict)
ch_multiqc_files = ch_multiqc_files.mix(
@@ -318,7 +327,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
@@ -327,9 +336,9 @@ workflow PREPROCESSING {
def topic_versions_string = topic_versions.versions_tuple
.map { process, tool, version ->
- [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
+ [process[process.lastIndexOf(':') + 1..-1], " ${tool}: ${version}"]
}
- .groupTuple(by:0)
+ .groupTuple(by: 0)
.map { process, tool_versions ->
tool_versions.unique().sort()
"${process}:\n${tool_versions.join('\n')}"
@@ -341,42 +350,43 @@ workflow PREPROCESSING {
storeDir: "${params.outdir}/pipeline_info",
name: 'nf_cmgg_preprocessing_software_mqc_versions.yml',
sort: true,
- newLine: true
+ newLine: true,
)
- .map { file -> [[id: 'main'], file] } // add meta for multiqc
+ .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_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()
+ ch_multiqc_logo = params.multiqc_logo ? channel.fromPath(params.multiqc_logo, checkIfExists: true) : channel.empty()
- summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
+ 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_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml').map { file -> [[id: 'main'], file] })
- 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_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_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.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true).map { file -> [[id: 'main'], file] })
- ch_multiqc_files = ch_multiqc_files.map { meta, files ->
- return [meta.library ? [id: meta.library] : [id: 'main'], files]
- }
- .branch { meta, files ->
- main: meta.id == 'main'
+ ch_multiqc_files = ch_multiqc_files
+ .map { meta, files ->
+ return [meta.library ? [id: meta.library] : [id: 'main'], files]
+ }
+ .branch { meta, files ->
+ main: meta.id == 'main'
return files
- library: meta.id != 'main'
+ library: meta.id != 'main'
return [meta, files instanceof List ? files : [files]]
- }
+ }
ch_multiqc_files.main.dump(tag: "MULTIQC files - main", pretty: true)
ch_multiqc_files.library.dump(tag: "MULTIQC files - library", pretty: true)
MULTIQC_MAIN(
- ch_multiqc_files.main.collect().map{ files -> [[id: 'main'], files] },
+ ch_multiqc_files.main.collect().map { files -> [[id: 'main'], files] },
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -385,7 +395,7 @@ workflow PREPROCESSING {
)
MULTIQC_LIBRARY(
- ch_multiqc_files.library.transpose(by:1).groupTuple(),
+ ch_multiqc_files.library.transpose(by: 1).groupTuple(),
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -394,46 +404,46 @@ workflow PREPROCESSING {
)
emit:
- demultiplex_interop = BCL_DEMULTIPLEX.out.interop
- demultiplex_reports = BCL_DEMULTIPLEX.out.reports
- demultiplex_logs = BCL_DEMULTIPLEX.out.logs
- demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
- fastp_json = FASTP.out.json
- fastp_html = FASTP.out.html
- crams = FASTQ_TO_CRAM.out.cram_crai
- rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
- rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
- align_reports = FASTQ_TO_CRAM.out.align_reports
- sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = COVERAGE.out.mosdepth_global
- mosdepth_summary = COVERAGE.out.mosdepth_summary
- mosdepth_regions = COVERAGE.out.mosdepth_regions
- mosdepth_per_base_d4 = COVERAGE.out.mosdepth_per_base_d4
- mosdepth_per_base_bed = COVERAGE.out.mosdepth_per_base_bed
- mosdepth_per_base_csi = COVERAGE.out.mosdepth_per_base_csi
- mosdepth_regions_bed = COVERAGE.out.mosdepth_regions_bed
- mosdepth_regions_csi = COVERAGE.out.mosdepth_regions_csi
- mosdepth_quantized_bed = COVERAGE.out.mosdepth_quantized_bed
- mosdepth_quantized_csi = COVERAGE.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed = COVERAGE.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi = COVERAGE.out.mosdepth_thresholds_csi
- samtools_coverage = COVERAGE.out.samtools_coverage
- panelcoverage = COVERAGE.out.panelcoverage
- samtools_stats = BAM_QC.out.samtools_stats
- samtools_flagstat = BAM_QC.out.samtools_flagstat
- samtools_idxstats = BAM_QC.out.samtools_idxstats
- picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
- picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
- 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
- versions = ch_versions
+ demultiplex_interop = BCL_DEMULTIPLEX.out.interop
+ demultiplex_reports = BCL_DEMULTIPLEX.out.reports
+ demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
+ fastp_json = FASTP.out.json
+ fastp_html = FASTP.out.html
+ crams = FASTQ_TO_CRAM.out.cram_crai
+ rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
+ rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
+ align_reports = FASTQ_TO_CRAM.out.align_reports
+ sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
+ mosdepth_global = COVERAGE.out.mosdepth_global
+ mosdepth_summary = COVERAGE.out.mosdepth_summary
+ mosdepth_regions = COVERAGE.out.mosdepth_regions
+ mosdepth_per_base_d4 = COVERAGE.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = COVERAGE.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = COVERAGE.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = COVERAGE.out.mosdepth_regions_bed
+ mosdepth_regions_csi = COVERAGE.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = COVERAGE.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = COVERAGE.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = COVERAGE.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = COVERAGE.out.mosdepth_thresholds_csi
+ samtools_coverage = COVERAGE.out.samtools_coverage
+ panelcoverage = COVERAGE.out.panelcoverage
+ samtools_stats = BAM_QC.out.samtools_stats
+ samtools_flagstat = BAM_QC.out.samtools_flagstat
+ samtools_idxstats = BAM_QC.out.samtools_idxstats
+ picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
+ picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
+ 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
+ versions = ch_versions
}
/*
From c672154501ebb44ec9d37c806c94fb11a9a12837 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 19:00:53 +0100
Subject: [PATCH 143/228] fix tests
---
conf/modules.config | 12 ++++++------
subworkflows/local/bam_qc/main.nf | 2 --
tests/subworkflows/local/bam_qc/main.nf.test | 6 ------
tests/workflows/preprocessing.nf.test | 18 +++---------------
4 files changed, 9 insertions(+), 29 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 36734a8a..d0ac2fe6 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -32,11 +32,11 @@ process {
ext.args = {
[
params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
- params.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
- params.trim_front > 0 ? "--trim_front1 ${params.trim_front}" : "",
- params.trim_tail > 0 ? "--trim_tail1 ${params.trim_tail}" : "",
- params.adapter_R1 ? "--adapter_sequence ${params.adapter_R1}" : "",
- params.adapter_R2 ? "--adapter_sequence_r2 ${params.adapter_R2}" : "",
+ meta.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
+ meta.trim_front > 0 ? "--trim_front1 ${meta.trim_front}" : "",
+ meta.trim_tail > 0 ? "--trim_tail1 ${meta.trim_tail}" : "",
+ meta.adapter_R1 ? "--adapter_sequence ${meta.adapter_R1}" : "",
+ meta.adapter_R2 ? "--adapter_sequence_r2 ${meta.adapter_R2}" : "",
"--compression 1",
].join(" ").trim()
}
@@ -184,7 +184,7 @@ process {
"-s",
"--json",
"-d 2500",
- params.umi_aware ? "--barcode-name" : "",
+ meta.umi_aware ? "--barcode-name" : "",
"--write-index",
"--output-fmt cram,version=3.0",
"--output-fmt-option archive",
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index 37ef16a7..6eb6a0ea 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -22,8 +22,6 @@ workflow BAM_QC {
.set { ch_bam_bai_fasta_fai }
SAMTOOLS_STATS(ch_bam_bai_fasta_fai)
- ch_versions = ch_versions.mix(SAMTOOLS_STATS.out.versions.first())
-
SAMTOOLS_FLAGSTAT(ch_bam_bai_fasta_fai)
ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions.first())
diff --git a/tests/subworkflows/local/bam_qc/main.nf.test b/tests/subworkflows/local/bam_qc/main.nf.test
index 90e3c564..8cd0106b 100644
--- a/tests/subworkflows/local/bam_qc/main.nf.test
+++ b/tests/subworkflows/local/bam_qc/main.nf.test
@@ -23,8 +23,6 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict", checkIfExists: true),
])
- // boolean
- input[1] = false
"""
}
}
@@ -57,8 +55,6 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict", checkIfExists: true),
])
- // boolean
- input[1] = false
"""
}
}
@@ -90,8 +86,6 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict", checkIfExists: true),
])
- // boolean
- input[1] = true
"""
}
}
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index 45c0fba2..fdcd70ec 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -44,11 +44,7 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
- // markdup
- input[2] = "bamsormadup"
- // roi
- input[3] = "https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed"
- input[4] = null
+ input[2] = null
"""
}
}
@@ -115,11 +111,7 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
- // markdup
- input[2] = "bamsormadup"
- // roi
- input[3] = ""
- input[4] = null
+ input[2] = null
"""
}
}
@@ -189,11 +181,7 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
- // markdup
- input[2] = "bamsormadup"
- // roi
- input[3] = "https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed"
- input[4] = null
+ input[2] = null
"""
}
}
From f723b97b4cb1de477b2e9fa415e945b602587af7 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 07:17:05 +0100
Subject: [PATCH 144/228] fix linting
---
modules.json | 4 ++--
.../nf-core/samtools/sormadup/samtools-sormadup.diff | 12 +++++++++++-
subworkflows/nf-core/utils_nfschema_plugin/main.nf | 2 +-
.../utils_nfschema_plugin/tests/nextflow.config | 2 +-
4 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/modules.json b/modules.json
index 0b710f92..037ebfe4 100644
--- a/modules.json
+++ b/modules.json
@@ -170,12 +170,12 @@
},
"utils_nfcore_pipeline": {
"branch": "master",
- "git_sha": "df4d1c8cdee98a1bbbed8fc51e82296568e0f9c1",
+ "git_sha": "65f5e638d901a51534c68fd5c1c19e8112fb4df1",
"installed_by": ["subworkflows"]
},
"utils_nfschema_plugin": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "fdc08b8b1ae74f56686ce21f7ea11ad11990ce57",
"installed_by": ["subworkflows"]
}
}
diff --git a/modules/nf-core/samtools/sormadup/samtools-sormadup.diff b/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
index 1e13bac8..e5a640be 100644
--- a/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
+++ b/modules/nf-core/samtools/sormadup/samtools-sormadup.diff
@@ -14,7 +14,17 @@ Changes in 'samtools/sormadup/main.nf':
output:
tuple val(meta), path("*.bam") , emit: bam, optional: true
-@@ -64,7 +63,6 @@
+@@ -33,9 +32,6 @@
+ args5.contains("--output-fmt cram") ? "cram" :
+ "bam"
+ def reference = fasta ? "--reference ${fasta}" : ""
+- // memory per thread for samtools sort
+- // set to 50% of the memory per thread, but at least 768M (samtools default)
+- def sort_memory = Math.max(768,(task.memory.mega/task.cpus*0.50).intValue())
+
+ """
+ samtools cat \\
+@@ -64,7 +60,6 @@
-u \\
-T ${prefix}.sort \\
--threads $task.cpus \\
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
index acb39724..1df8b76f 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf
+++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
@@ -38,7 +38,7 @@ workflow UTILS_NFSCHEMA_PLUGIN {
}
log.info paramsHelp(
help_options,
- params.help instanceof String ? params.help : "",
+ (params.help instanceof String && params.help != "true") ? params.help : "",
)
exit 0
}
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
index 8d8c7371..f6537cc3 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
@@ -1,5 +1,5 @@
plugins {
- id "nf-schema@2.5.1"
+ id "nf-schema@2.6.1"
}
validation {
From e479866d171034926da16c7abda822068b48c644 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 07:26:46 +0100
Subject: [PATCH 145/228] fix fq_to_aligned cram test
---
.../local/fastq_to_aligned_cram/main.nf.test | 39 ++++++++-----------
1 file changed, 17 insertions(+), 22 deletions(-)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
index 9a7a9eb3..549854ff 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
@@ -19,6 +19,7 @@ nextflow_workflow {
samplename:'test',
single_end:false,
sample_type:'DNA',
+ markdup: "bamsormadup",
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"
@@ -33,8 +34,6 @@ nextflow_workflow {
file("s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"),
[]
])
- // markdup
- input[1] = "bamsormadup"
"""
}
}
@@ -62,6 +61,7 @@ nextflow_workflow {
samplename:'test',
single_end:false,
sample_type:'RNA',
+ markdup: "bamsormadup",
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",
@@ -77,8 +77,6 @@ nextflow_workflow {
file("s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"),
[]
])
- // markdup
- input[1] = "bamsormadup"
"""
}
}
@@ -102,10 +100,11 @@ nextflow_workflow {
// [meta, [fq_1,fq_2], aligner, index, fasta]
input[0] = Channel.of([
[
- id:'test',
- samplename:'test',
- single_end:false,
- sample_type:'DNA',
+ id: "test",
+ samplename: "test",
+ single_end: false,
+ sample_type: "DNA",
+ markdup: "samtools",
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"
@@ -120,8 +119,6 @@ nextflow_workflow {
file("s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"),
[]
])
- // markdup
- input[1] = "samtools"
"""
}
}
@@ -145,10 +142,11 @@ nextflow_workflow {
// [meta, [fq_1,fq_2], aligner, index, fasta]
input[0] = Channel.of([
[
- id:'test',
- samplename:'test',
- single_end:false,
- sample_type:'DNA',
+ id: "test",
+ samplename: "test",
+ single_end: false,
+ sample_type: "DNA",
+ markdup: "false",
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"
@@ -163,8 +161,6 @@ nextflow_workflow {
file("s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"),
[]
])
- // markdup
- input[1] = "false"
"""
}
}
@@ -189,10 +185,11 @@ nextflow_workflow {
// [meta, [fq_1,fq_2], aligner, index, fasta]
input[0] = Channel.of([
[
- id:'test',
- samplename:'test',
- single_end:false,
- sample_type:'DNA',
+ id: "test",
+ samplename: "test",
+ single_end: false,
+ sample_type: "DNA",
+ markdup: "false",
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"
@@ -207,8 +204,6 @@ nextflow_workflow {
file("s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"),
[]
])
- // markdup
- input[1] = "false"
"""
}
}
From 1472bc59105f17c27746d38b2d59934743b36911 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 07:34:25 +0100
Subject: [PATCH 146/228] fix preprocessing test inputs
---
tests/workflows/preprocessing.nf.test | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index fdcd70ec..f31029f4 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -23,6 +23,7 @@ nextflow_workflow {
tag: "WES",
sample_type: "DNA",
aligner: "bwamem",
+ markdup: "bamsormadup"
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -90,6 +91,7 @@ nextflow_workflow {
tag: "WGS",
sample_type: "DNA",
aligner: "bwamem",
+ markdup: "bamsormadup"
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -160,6 +162,7 @@ nextflow_workflow {
tag: "WES",
sample_type: "DNA",
aligner: "bwamem",
+ markdup: "bamsormadup"
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
From bdd54c17b56e0bf76149c6a290899f8d098f8925 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 09:37:45 +0100
Subject: [PATCH 147/228] update snapshot
---
.../fastq_to_aligned_cram/main.nf.test.snap | 72 +++++++++++--------
1 file changed, 41 insertions(+), 31 deletions(-)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index aabf04cd..5db51b5f 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -15,6 +15,7 @@
"fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
},
"id": "test",
+ "markdup": "false",
"sample_type": "DNA",
"samplename": "test",
"single_end": false
@@ -25,13 +26,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
],
"versions": [
"versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
@@ -40,16 +41,16 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-17T14:52:18.252297311"
+ "timestamp": "2026-02-10T09:29:24.149695"
},
"fastq to cram - bwa - bamsormadup": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -61,6 +62,7 @@
"fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
},
"id": "test",
+ "markdup": "bamsormadup",
"sample_type": "DNA",
"samplename": "test",
"single_end": false
@@ -71,10 +73,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -85,6 +87,7 @@
"samplename": "test",
"single_end": false,
"sample_type": "DNA",
+ "markdup": "bamsormadup",
"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"
@@ -103,16 +106,16 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-17T14:46:54.525880067"
+ "timestamp": "2026-02-10T09:24:26.615795"
},
"fastq to cram - bwa - samtools sormadup": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -124,6 +127,7 @@
"fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
},
"id": "test",
+ "markdup": "samtools",
"sample_type": "DNA",
"samplename": "test",
"single_end": false
@@ -134,10 +138,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -148,6 +152,7 @@
"samplename": "test",
"single_end": false,
"sample_type": "DNA",
+ "markdup": "samtools",
"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"
@@ -165,16 +170,16 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-17T14:50:28.614932101"
+ "timestamp": "2026-02-10T09:27:45.908866"
},
"fastq to cram - star - bamsormadup": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -187,6 +192,7 @@
"star": "s3://test-data/genomics/homo_sapiens/genome/star/"
},
"id": "test",
+ "markdup": "bamsormadup",
"sample_type": "RNA",
"samplename": "test",
"single_end": false
@@ -205,6 +211,7 @@
"samplename": "test",
"single_end": false,
"sample_type": "RNA",
+ "markdup": "bamsormadup",
"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",
@@ -224,6 +231,7 @@
"samplename": "test",
"single_end": false,
"sample_type": "RNA",
+ "markdup": "bamsormadup",
"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",
@@ -243,6 +251,7 @@
"samplename": "test",
"single_end": false,
"sample_type": "RNA",
+ "markdup": "bamsormadup",
"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",
@@ -260,16 +269,16 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-17T16:27:53.162318921"
+ "timestamp": "2026-02-10T09:26:55.879993"
},
"fastq to cram - bwa - samtools sort": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -281,6 +290,7 @@
"fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
},
"id": "test",
+ "markdup": "false",
"sample_type": "DNA",
"samplename": "test",
"single_end": false
@@ -291,13 +301,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
],
"versions": [
"versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
@@ -306,9 +316,9 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-17T14:51:22.925873858"
+ "timestamp": "2026-02-10T09:28:34.042629"
}
-}
+}
\ No newline at end of file
From 3ded077caa9e110d7f67de6c838b26e7be3ccc14 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 09:49:21 +0100
Subject: [PATCH 148/228] update snapshot
---
tests/subworkflows/local/fastq_align_rna/main.nf.test.snap | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index 2cd3d63c..cf11ffe9 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -119,4 +119,4 @@
},
"timestamp": "2024-05-28T16:17:08.089796673"
}
-}
+}
\ No newline at end of file
From 71c8972a0061936c08e76169a737acfa77bf19b5 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 09:57:01 +0100
Subject: [PATCH 149/228] fix roi default
---
assets/schema_input.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/assets/schema_input.json b/assets/schema_input.json
index 59ee5046..f656f58f 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -101,7 +101,7 @@
"format": "file-path",
"description": "Region of interest BED file for coverage analysis",
"pattern": "^\\S+\\.bed$",
- "default": null
+ "default": "[]"
},
"tag": {
"meta": ["tag"],
From 0b4e4bd735dd75174b08c87d6e254867ae44171b Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 12:24:01 +0100
Subject: [PATCH 150/228] nextflow lint entire pipeline
---
assets/schema_input.json | 2 +-
conf/base.config | 38 +-
conf/modules.config | 60 +--
conf/test_full.config | 4 +-
main.nf | 432 +++++++++++-------
nextflow.config | 252 +++++-----
nf-test.config | 12 +-
subworkflows/local/bam_qc/main.nf | 43 +-
subworkflows/local/coverage/main.nf | 32 +-
subworkflows/local/fastq_align_rna/main.nf | 19 +-
.../local/fastq_to_aligned_cram/main.nf | 23 +-
.../main.nf | 91 ++--
tests/inputs/fastq.yml | 2 +
tests/inputs/fastq_rna.yml | 2 +
workflows/preprocessing.nf | 4 +-
15 files changed, 550 insertions(+), 466 deletions(-)
diff --git a/assets/schema_input.json b/assets/schema_input.json
index f656f58f..59ee5046 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -101,7 +101,7 @@
"format": "file-path",
"description": "Region of interest BED file for coverage analysis",
"pattern": "^\\S+\\.bed$",
- "default": "[]"
+ "default": null
},
"tag": {
"meta": ["tag"],
diff --git a/conf/base.config b/conf/base.config
index ff798214..ac353851 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -10,41 +10,41 @@
process {
- cpus = { 1 * task.attempt }
- memory = { 8.GB * task.attempt }
- time = { 4.h * task.attempt }
+ cpus = { 1 * task.attempt }
+ memory = { 8.GB * task.attempt }
+ time = { 4.h * task.attempt }
errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
maxRetries = 3
maxErrors = '-1'
// Process-specific resource requirements
- withLabel:process_single {
- cpus = { 1 }
+ withLabel: process_single {
+ cpus = { 1 }
memory = { 8.GB * task.attempt }
- time = { 4.h * task.attempt }
+ time = { 4.h * task.attempt }
}
- withLabel:process_low {
- cpus = { 2 * task.attempt }
+ withLabel: process_low {
+ cpus = { 2 * task.attempt }
memory = { 16.GB * task.attempt }
- time = { 4.h * task.attempt }
+ time = { 4.h * task.attempt }
}
- withLabel:process_medium {
- cpus = { 8 * task.attempt }
+ withLabel: process_medium {
+ cpus = { 8 * task.attempt }
memory = { 64.GB * task.attempt }
- time = { 8.h * task.attempt }
+ time = { 8.h * task.attempt }
}
- withLabel:process_high {
- cpus = { 16 * task.attempt }
+ withLabel: process_high {
+ cpus = { 16 * task.attempt }
memory = { 128.GB * task.attempt }
- time = { 16.h * task.attempt }
+ time = { 16.h * task.attempt }
}
- withLabel:process_long {
- time = { 20.h * task.attempt }
+ withLabel: process_long {
+ time = { 20.h * task.attempt }
}
- withLabel:error_ignore {
+ withLabel: error_ignore {
errorStrategy = 'ignore'
}
- withLabel:error_retry {
+ withLabel: error_retry {
errorStrategy = 'retry'
maxRetries = 2
}
diff --git a/conf/modules.config b/conf/modules.config
index d0ac2fe6..16f7338f 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -14,9 +14,9 @@ process {
// BCL convert
withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' {
- cpus = 16
- memory = { 64.GB * task.attempt }
- ext.args = {
+ cpus = 16
+ memory = { 64.GB * task.attempt }
+ ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
"--force",
@@ -27,16 +27,16 @@ process {
// FastP
withName: '.*FASTP' {
- cpus = 4
- memory = { 4.GB * task.attempt }
- ext.args = {
+ cpus = 4
+ memory = { 4.GB * task.attempt }
+ ext.args = {
[
- params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
- meta.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
- meta.trim_front > 0 ? "--trim_front1 ${meta.trim_front}" : "",
- meta.trim_tail > 0 ? "--trim_tail1 ${meta.trim_tail}" : "",
- meta.adapter_R1 ? "--adapter_sequence ${meta.adapter_R1}" : "",
- meta.adapter_R2 ? "--adapter_sequence_r2 ${meta.adapter_R2}" : "",
+ params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
+ meta.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
+ meta.trim_front > 0 ? "--trim_front1 ${meta.trim_front}" : "",
+ meta.trim_tail > 0 ? "--trim_tail1 ${meta.trim_tail}" : "",
+ meta.adapter_R1 ? "--adapter_sequence ${meta.adapter_R1}" : "",
+ meta.adapter_R2 ? "--adapter_sequence_r2 ${meta.adapter_R2}" : "",
"--compression 1",
].join(" ").trim()
}
@@ -57,7 +57,7 @@ process {
withName: '.*FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
cpus = 16
memory = 32.GB
- ext.args = {
+ ext.args = {
[
"--local",
"--fast-local",
@@ -65,7 +65,7 @@ process {
meta.readgroup ? "--rg " + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join(" --rg ") : "",
].join(" ").trim()
}
- ext.args2 = "--fast"
+ ext.args2 = "--fast"
}
//// BWA mem/BWA mem2
@@ -107,8 +107,8 @@ process {
//// SNAP
withName: '.*FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
- cpus = 16
- memory = 64.GB
+ cpus = 16
+ memory = 64.GB
ext.args = {
[
"-b-",
@@ -125,8 +125,8 @@ process {
//// STROBEALIGN
withName: '.*FASTQ_ALIGN_DNA:STROBEALIGN' {
- cpus = 16
- memory = 32.GB
+ cpus = 16
+ memory = 32.GB
ext.args = {
[
meta.readgroup ? "--rg-id ${meta.readgroup.ID}" : "",
@@ -139,9 +139,9 @@ process {
//// STAR
withName: '.*FASTQ_ALIGN_RNA:STAR_ALIGN' {
ext.prefix = { "${meta.id}.star" }
- cpus = 16
- memory = 64.GB
- ext.args = {
+ cpus = 16
+ memory = 64.GB
+ ext.args = {
[
"--readFilesCommand gunzip -c",
"--twopassMode Basic",
@@ -222,9 +222,9 @@ process {
//// Samtools convert
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {
- cpus = 8
- memory = 8.GB
- ext.args = {
+ cpus = 8
+ memory = 8.GB
+ ext.args = {
[
"-C",
"--output-fmt cram,version=3.0",
@@ -247,15 +247,15 @@ process {
//// Samtools coverage
withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {
- cpus = 1
- memory = 1.GB
+ cpus = 1
+ memory = 1.GB
ext.prefix = { "${meta.id}.coverage" }
}
// QC
withName: '.*BAM_QC:SAMTOOLS_.*$' {
- cpus = 1
+ cpus = 1
memory = 1.GB
}
@@ -267,15 +267,15 @@ process {
}
withName: '.*MD5SUM' {
- cpus = 1
+ cpus = 1
memory = 128.MB
}
// MultiQC
withName: '.*MULTIQC_.*$' {
container = "cmgg/multiqc_cmgg:0.0.2-multiqc-v1.33"
- cpus = 1
- memory = 4.GB
+ cpus = 1
+ memory = 4.GB
}
withName: '.*MULTIQC_MAIN' {
ext.prefix = { params.multiqc_title ? params.multiqc_title : "multiqc" }
diff --git a/conf/test_full.config b/conf/test_full.config
index 6225119a..bad1c6f1 100644
--- a/conf/test_full.config
+++ b/conf/test_full.config
@@ -17,8 +17,8 @@ params {
// Input data for full size test
// TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA)
// TODO nf-core: Give any required params for the test so that command line flags are not needed
- input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv'
+ input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv'
// Genome references
- genome = 'R64-1-1'
+ genome = 'R64-1-1'
}
diff --git a/main.nf b/main.nf
index 305e0e6b..f9ce7868 100644
--- a/main.nf
+++ b/main.nf
@@ -62,185 +62,263 @@ workflow {
)
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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
- fastp_json = PREPROCESSING.out.fastp_json
- fastp_html = PREPROCESSING.out.fastp_html
- crams = PREPROCESSING.out.crams
- rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
- rna_junctions = PREPROCESSING.out.rna_junctions
- align_reports = PREPROCESSING.out.align_reports
- sormadup_metrics = PREPROCESSING.out.sormadup_metrics
- mosdepth_global = PREPROCESSING.out.mosdepth_global
- mosdepth_summary = PREPROCESSING.out.mosdepth_summary
- mosdepth_regions = PREPROCESSING.out.mosdepth_regions
- mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
- mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
- mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
- mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
- mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
- mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
- mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
- samtools_coverage = PREPROCESSING.out.samtools_coverage
- panelcoverage = PREPROCESSING.out.panelcoverage
- samtools_stats = PREPROCESSING.out.samtools_stats
- samtools_flagstat = PREPROCESSING.out.samtools_flagstat
- samtools_idxstats = PREPROCESSING.out.samtools_idxstats
- picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
+ 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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
+ fastp_json = PREPROCESSING.out.fastp_json
+ fastp_html = PREPROCESSING.out.fastp_html
+ crams = PREPROCESSING.out.crams
+ rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
+ rna_junctions = PREPROCESSING.out.rna_junctions
+ align_reports = PREPROCESSING.out.align_reports
+ sormadup_metrics = PREPROCESSING.out.sormadup_metrics
+ mosdepth_global = PREPROCESSING.out.mosdepth_global
+ mosdepth_summary = PREPROCESSING.out.mosdepth_summary
+ mosdepth_regions = PREPROCESSING.out.mosdepth_regions
+ mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
+ mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
+ samtools_coverage = PREPROCESSING.out.samtools_coverage
+ panelcoverage = PREPROCESSING.out.panelcoverage
+ samtools_stats = PREPROCESSING.out.samtools_stats
+ samtools_flagstat = PREPROCESSING.out.samtools_flagstat
+ samtools_idxstats = PREPROCESSING.out.samtools_idxstats
+ picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
picard_multiplemetrics_pdf = PREPROCESSING.out.picard_multiplemetrics_pdf
- 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
+ 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
}
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
- } }
- demultiplex_logs { path { meta, log ->
- def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
- log >> out_path
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- mosdepth_global { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_summary { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_d4 { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_quantized_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_quantized_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_thresholds_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_thresholds_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_coverage { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- panelcoverage { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_stats { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_flagstat { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_idxstats { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_multiplemetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_multiplemetrics_pdf { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_wgsmetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_hsmetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- md5sums { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- multiqc_main_report { path "multiqc/" }
- multiqc_main_data { path "multiqc/" }
- multiqc_main_plots { path "multiqc/" }
- multiqc_library_report { path "multiqc/" }
- multiqc_library_data { path "multiqc/" }
- multiqc_library_plots { path "multiqc/" }
+ 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
+ }
+ }
+ demultiplex_logs {
+ path { meta, log ->
+ def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
+ log >> out_path
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ mosdepth_global {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_summary {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_d4 {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_quantized_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_quantized_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_thresholds_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_thresholds_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_coverage {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ panelcoverage {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_stats {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_flagstat {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_idxstats {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_multiplemetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_multiplemetrics_pdf {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_wgsmetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_hsmetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ md5sums {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ multiqc_main_report {
+ path "multiqc/"
+ }
+ multiqc_main_data {
+ path "multiqc/"
+ }
+ multiqc_main_plots {
+ path "multiqc/"
+ }
+ multiqc_library_report {
+ path "multiqc/"
+ }
+ multiqc_library_data {
+ path "multiqc/"
+ }
+ multiqc_library_plots {
+ path "multiqc/"
+ }
}
diff --git a/nextflow.config b/nextflow.config
index 30835d39..05719293 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -10,47 +10,47 @@
params {
// Input options
- input = null
+ input = null
// References
- genome = null
- igenomes_base = '/references/'
- igenomes_ignore = false
+ genome = null
+ igenomes_base = '/references/'
+ igenomes_ignore = false
// Analysis options
- split_fastq = 100000000
- genelists = null
+ split_fastq = 100000000
+ genelists = null
// MultiQC options
- multiqc_config = null
- multiqc_title = null
- multiqc_logo = null
- max_multiqc_email_size = '25.MB'
- multiqc_methods_description = null
+ multiqc_config = null
+ multiqc_title = null
+ multiqc_logo = null
+ max_multiqc_email_size = '25.MB'
+ multiqc_methods_description = null
// Boilerplate options
- outdir = null
- publish_dir_mode = 'copy'
- email = null
- email_on_fail = null
- plaintext_email = false
- monochrome_logs = false
- hook_url = System.getenv('HOOK_URL')
- help = false
- help_full = false
- show_hidden = false
- version = false
- pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
- trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')
+ outdir = null
+ publish_dir_mode = 'copy'
+ email = null
+ email_on_fail = null
+ plaintext_email = false
+ monochrome_logs = false
+ hook_url = System.getenv('HOOK_URL')
+ help = false
+ help_full = false
+ show_hidden = false
+ version = false
+ pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
+ trace_report_suffix = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')
// Config options
- config_profile_name = null
- config_profile_description = null
+ config_profile_name = null
+ config_profile_description = null
- custom_config_version = 'master'
- custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
- config_profile_contact = null
- config_profile_url = null
+ custom_config_version = 'master'
+ custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
+ config_profile_contact = null
+ config_profile_url = null
// CMGG Config options
cmgg_config_profile_name = null
@@ -62,7 +62,7 @@ params {
cmgg_config_profile_url = null
// Schema validation default options
- validate_params = true
+ validate_params = true
}
// Load base.config by default for all pipelines
@@ -73,40 +73,40 @@ includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_
profiles {
debug {
- dumpHashes = true
- process.beforeScript = 'echo $HOSTNAME'
- cleanup = false
+ dumpHashes = true
+ process.beforeScript = 'echo $HOSTNAME'
+ 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
+ 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
+ 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
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
- docker.runOptions = '-u $(id -u):$(id -g)'
+ docker.enabled = true
+ conda.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
+ docker.runOptions = '-u $(id -u):$(id -g)'
}
arm64 {
process.arch = 'arm64'
@@ -120,54 +120,54 @@ profiles {
wave.strategy = 'conda,container'
}
emulate_amd64 {
- docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
+ docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
}
singularity {
- singularity.enabled = true
- singularity.autoMounts = true
- conda.enabled = false
- docker.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ singularity.enabled = true
+ singularity.autoMounts = true
+ conda.enabled = false
+ docker.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
podman {
- podman.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ podman.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
shifter {
- shifter.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ shifter.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
charliecloud {
- charliecloud.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- apptainer.enabled = false
+ charliecloud.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ apptainer.enabled = false
}
apptainer {
- apptainer.enabled = true
- apptainer.autoMounts = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
+ apptainer.enabled = true
+ apptainer.autoMounts = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
}
wave {
apptainer.ociAutoPull = true
@@ -177,12 +177,16 @@ profiles {
wave.strategy = 'conda,container'
}
gpu {
- docker.runOptions = '-u $(id -u):$(id -g) --gpus all'
- apptainer.runOptions = '--nv'
- singularity.runOptions = '--nv'
+ docker.runOptions = '-u $(id -u):$(id -g) --gpus all'
+ apptainer.runOptions = '--nv'
+ singularity.runOptions = '--nv'
+ }
+ test {
+ includeConfig 'conf/test.config'
+ }
+ test_full {
+ includeConfig 'conf/test_full.config'
}
- test { includeConfig 'conf/test.config' }
- test_full { includeConfig 'conf/test_full.config' }
}
// Load nf-core custom profiles from different institutions
@@ -202,10 +206,10 @@ includeConfig params.cmgg_custom_config_base && (!System.getenv('NXF_OFFLINE') |
// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile
// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled
// Set to your registry if you have a mirror of containers
-apptainer.registry = 'quay.io'
-docker.registry = 'quay.io'
-podman.registry = 'quay.io'
-singularity.registry = 'quay.io'
+apptainer.registry = 'quay.io'
+docker.registry = 'quay.io'
+podman.registry = 'quay.io'
+singularity.registry = 'quay.io'
charliecloud.registry = 'quay.io'
// Export these variables to prevent local Python/R libraries from conflicting with those in the container
@@ -222,35 +226,35 @@ env {
// Set bash options
process.shell = [
"bash",
- "-C", // No clobber - prevent output redirection from overwriting files.
- "-e", // Exit if a tool returns a non-zero status/exit code
- "-u", // Treat unset variables and parameters as an error
- "-o", // Returns the status of the last command to exit..
- "pipefail" // ..with a non-zero status or zero if all successfully execute
+ "-C",
+ "-e",
+ "-u",
+ "-o",
+ "pipefail",
]
// Disable process selector warnings by default. Use debug profile to enable warnings.
nextflow.enable.configProcessNamesValidation = false
timeline {
- enabled = true
+ enabled = true
overwrite = true
- file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html"
+ file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html"
}
report {
- enabled = true
+ enabled = true
overwrite = true
- file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html"
+ file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html"
}
trace {
- enabled = true
+ enabled = true
overwrite = true
- file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt"
+ file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt"
}
dag {
- enabled = true
+ 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}.html"
}
manifest {
@@ -261,16 +265,16 @@ manifest {
affiliation: 'Center for Medical Genetics Ghent, Ghent University, Belgium',
email: 'matthias.desmet@ugent.be',
github: '@matthdsm',
- contribution: ["author","maintainer"], // List of contribution types ('author', 'maintainer' or 'contributor')
- orcid: 'https://orcid.org/0000-0003-2555-3114'
+ contribution: ["author", "maintainer"],
+ orcid: 'https://orcid.org/0000-0003-2555-3114',
],
[
name: ' Nicolas Vannieuwkerke',
affiliation: 'Center for Medical Genetics Ghent, Ghent University Hospital, Belgium',
email: 'nicolas.vannieuwkerke@ugent.be',
github: '@nvnieuwk',
- contribution: ["maintainer"], // List of contribution types ('author', 'maintainer' or 'contributor')
- orcid: 'https://orcid.org/0009-0003-5619-1555'
+ contribution: ["maintainer"],
+ orcid: 'https://orcid.org/0009-0003-5619-1555',
],
]
homePage = 'https://github.com/nf-cmgg/preprocessing'
@@ -284,12 +288,12 @@ manifest {
// Nextflow plugins
plugins {
- id 'nf-schema@2.6.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet
+ id 'nf-schema@2.6.1'
}
validation {
defaultIgnoreParams = ["genomes"]
- monochromeLogs = params.monochrome_logs
+ monochromeLogs = params.monochrome_logs
}
// Load modules.config for DSL2 module specific options
diff --git a/nf-test.config b/nf-test.config
index fa368ccb..c5d343b4 100644
--- a/nf-test.config
+++ b/nf-test.config
@@ -1,21 +1,21 @@
config {
// location for all nf-test tests
- testsDir "."
+ testsDir = "."
// nf-test directory including temporary files for each test
- workDir System.getenv("NFT_WORKDIR") ?: ".nf-test"
+ workDir = System.getenv("NFT_WORKDIR") ?: ".nf-test"
// location of an optional nextflow.config file specific for executing tests
- configFile "tests/nextflow.config"
+ configFile = "tests/nextflow.config"
// ignore tests coming from the nf-core/modules repo
- ignore 'modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'
+ 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"
// 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'
+ triggers = ['nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore']
// load the necessary plugins
plugins {
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index 6eb6a0ea..ba8f4b5f 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -16,10 +16,10 @@ workflow BAM_QC {
ch_versions = channel.empty()
ch_bam_bai_roi_fasta_fai_dict
- .map { meta, bam, bai, _roi, fasta, fai, _dict ->
- return [meta, bam, bai, fasta, fai]
- }
- .set { ch_bam_bai_fasta_fai }
+ .map { meta, bam, bai, _roi, fasta, fai, _dict ->
+ return [meta, bam, bai, fasta, fai]
+ }
+ .set { ch_bam_bai_fasta_fai }
SAMTOOLS_STATS(ch_bam_bai_fasta_fai)
SAMTOOLS_FLAGSTAT(ch_bam_bai_fasta_fai)
@@ -34,10 +34,10 @@ workflow BAM_QC {
ch_picard_wgsmetrics = channel.empty()
ch_bam_bai_roi_fasta_fai_dict
- .filter { meta, _bam, _bai, _roi, _fasta, _fai, _dict ->
- meta.disable_picard_metrics != true
- }
- .set { ch_picard }
+ .filter { meta, _bam, _bai, _roi, _fasta, _fai, _dict ->
+ meta.disable_picard_metrics != true
+ }
+ .set { ch_picard }
PICARD_COLLECTMULTIPLEMETRICS(ch_picard)
ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first())
@@ -45,13 +45,13 @@ workflow BAM_QC {
ch_picard_multiplemetrics_pdf = PICARD_COLLECTMULTIPLEMETRICS.out.pdf
ch_picard
- .branch { meta, bam, bai, roi, fasta, fai, dict ->
- hsmetrics: roi != []
+ .branch { meta, bam, bai, roi, fasta, fai, dict ->
+ hsmetrics: roi != []
return [meta, bam, bai, roi, fasta, fai, dict]
- wgsmetrics: roi == []
+ wgsmetrics: roi == []
return [meta, bam, bai, fasta, fai, dict]
- }
- .set { ch_picard_coverage }
+ }
+ .set { ch_picard_coverage }
PICARD_COLLECTWGSMETRICS(ch_picard_coverage.wgsmetrics, [])
ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first())
@@ -61,14 +61,13 @@ workflow BAM_QC {
ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first())
ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
-
emit:
- samtools_stats = SAMTOOLS_STATS.out.stats
- samtools_flagstat = SAMTOOLS_FLAGSTAT.out.flagstat
- samtools_idxstats = SAMTOOLS_IDXSTATS.out.idxstats
- picard_multiplemetrics = ch_picard_multiplemetrics
- picard_multiplemetrics_pdf = ch_picard_multiplemetrics_pdf
- picard_wgsmetrics = ch_picard_wgsmetrics
- picard_hsmetrics = ch_picard_hsmetrics
- versions = ch_versions
+ samtools_stats = SAMTOOLS_STATS.out.stats
+ samtools_flagstat = SAMTOOLS_FLAGSTAT.out.flagstat
+ samtools_idxstats = SAMTOOLS_IDXSTATS.out.idxstats
+ picard_multiplemetrics = ch_picard_multiplemetrics
+ picard_multiplemetrics_pdf = ch_picard_multiplemetrics_pdf
+ picard_wgsmetrics = ch_picard_wgsmetrics
+ picard_hsmetrics = ch_picard_hsmetrics
+ versions = ch_versions
}
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 27a19c43..501b0773 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -8,7 +8,7 @@ include { PANELCOVERAGE } from "../../../modules/local/panelcoverage/main"
workflow COVERAGE {
take:
ch_meta_cram_crai_fasta_fai_roi // channel: [mandatory] [meta, cram, crai, fasta, fai, roi]
- ch_genelists // channel: [optional] [genelists]
+ ch_genelists // channel: [optional] [genelists]
main:
@@ -56,19 +56,19 @@ workflow COVERAGE {
ch_coverageqc_files = ch_coverageqc_files.mix(PANELCOVERAGE.out.regiondist)
emit:
- mosdepth_global = MOSDEPTH.out.global_txt
- mosdepth_summary = MOSDEPTH.out.summary_txt
- mosdepth_regions = MOSDEPTH.out.regions_txt
- mosdepth_per_base_d4 = MOSDEPTH.out.per_base_d4
- mosdepth_per_base_bed = MOSDEPTH.out.per_base_bed
- mosdepth_per_base_csi = MOSDEPTH.out.per_base_csi
- mosdepth_regions_bed = MOSDEPTH.out.regions_bed
- mosdepth_regions_csi = MOSDEPTH.out.regions_csi
- mosdepth_quantized_bed = MOSDEPTH.out.quantized_bed
- mosdepth_quantized_csi = MOSDEPTH.out.quantized_csi
- mosdepth_thresholds_bed = MOSDEPTH.out.thresholds_bed
- mosdepth_thresholds_csi = MOSDEPTH.out.thresholds_csi
- samtools_coverage = SAMTOOLS_COVERAGE.out.coverage
- panelcoverage = PANELCOVERAGE.out.regiondist
- versions = ch_versions
+ mosdepth_global = MOSDEPTH.out.global_txt
+ mosdepth_summary = MOSDEPTH.out.summary_txt
+ mosdepth_regions = MOSDEPTH.out.regions_txt
+ mosdepth_per_base_d4 = MOSDEPTH.out.per_base_d4
+ mosdepth_per_base_bed = MOSDEPTH.out.per_base_bed
+ mosdepth_per_base_csi = MOSDEPTH.out.per_base_csi
+ mosdepth_regions_bed = MOSDEPTH.out.regions_bed
+ mosdepth_regions_csi = MOSDEPTH.out.regions_csi
+ mosdepth_quantized_bed = MOSDEPTH.out.quantized_bed
+ mosdepth_quantized_csi = MOSDEPTH.out.quantized_csi
+ mosdepth_thresholds_bed = MOSDEPTH.out.thresholds_bed
+ mosdepth_thresholds_csi = MOSDEPTH.out.thresholds_csi
+ samtools_coverage = SAMTOOLS_COVERAGE.out.coverage
+ panelcoverage = PANELCOVERAGE.out.regiondist
+ versions = ch_versions
}
diff --git a/subworkflows/local/fastq_align_rna/main.nf b/subworkflows/local/fastq_align_rna/main.nf
index ce0d6862..1ca27833 100644
--- a/subworkflows/local/fastq_align_rna/main.nf
+++ b/subworkflows/local/fastq_align_rna/main.nf
@@ -5,9 +5,9 @@
//
-include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
-include { GNU_SORT as SORT_MERGE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
-include { GNU_SORT as SORT_MERGE_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
+include { GNU_SORT as SORT_MERGE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { GNU_SORT as SORT_MERGE_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
workflow FASTQ_ALIGN_RNA {
take:
@@ -55,15 +55,16 @@ workflow FASTQ_ALIGN_RNA {
ch_versions = ch_versions.mix(SORT_MERGE_JUNCTIONS.out.versions.first())
emit:
- bam = ch_bam // channel: [ [meta], bam ]
- splice_junctions = SORT_MERGE_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
- junctions = SORT_MERGE_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
- reports = ch_reports // channel: [ [meta], log ]
- versions = ch_versions // channel: [ versions.yml ]
+ bam = ch_bam // channel: [ [meta], bam ]
+ splice_junctions = SORT_MERGE_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
+ junctions = SORT_MERGE_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
+ reports = ch_reports // channel: [ [meta], log ]
+ versions = ch_versions // channel: [ versions.yml ]
}
def group_junctions(ch) {
- return ch.map { meta, files ->
+ return ch
+ .map { meta, files ->
def gk = (meta.chunks as Integer ?: 1)
return [
groupKey(
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index 9d30ea92..226e97b9 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -38,7 +38,8 @@ workflow FASTQ_TO_CRAM {
.branch { meta, reads, aligner, index, fasta, gtf ->
rna: meta.sample_type == "RNA"
return [meta, reads, "star", getGenomeAttribute(meta.genome_data, 'star'), gtf]
- dna: true // catch all non-RNA samples as DNA, as some may be missing sample_type or have other sample types (e.g. tissue, cell line, etc.) that should be aligned with the DNA aligner
+ dna: true
+ // catch all non-RNA samples as DNA, as some may be missing sample_type or have other sample types (e.g. tissue, cell line, etc.) that should be aligned with the DNA aligner
//dna: meta.sample_type == "DNA" || meta.sample_type == "Tissue"
return [meta, reads, aligner, index, fasta]
}
@@ -93,13 +94,13 @@ workflow FASTQ_TO_CRAM {
.dump(tag: "FASTQ_TO_CRAM: aligned bam per sample", pretty: true)
.branch { meta, files, fasta ->
bamsormadup: meta.markdup == "bamsormadup"
- return [meta, files, fasta]
+ return [meta, files, fasta]
samtools: meta.markdup == "samtools"
- return [meta, files, fasta]
+ return [meta, files, fasta]
sort: meta.markdup == "false" || meta.markdup == false
- return [meta, files, fasta]
+ return [meta, files, fasta]
unknown: true
- error("markdup option ${meta.markdup} not supported")
+ error("markdup option ${meta.markdup} not supported")
}
.set { ch_bam_fasta }
@@ -156,10 +157,10 @@ workflow FASTQ_TO_CRAM {
ch_cram_crai.dump(tag: "FASTQ_TO_CRAM: cram and crai", pretty: true)
emit:
- cram_crai = ch_cram_crai
- rna_splice_junctions = FASTQ_ALIGN_RNA.out.splice_junctions
- rna_junctions = FASTQ_ALIGN_RNA.out.junctions
- sormadup_metrics = ch_sormadup_metrics
- align_reports = FASTQ_ALIGN_DNA.out.reports
- versions = ch_versions
+ cram_crai = ch_cram_crai
+ rna_splice_junctions = FASTQ_ALIGN_RNA.out.splice_junctions
+ rna_junctions = FASTQ_ALIGN_RNA.out.junctions
+ sormadup_metrics = ch_sormadup_metrics
+ align_reports = FASTQ_ALIGN_DNA.out.reports
+ versions = ch_versions
}
diff --git a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
index c66aaf01..4c65f558 100644
--- a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
@@ -8,15 +8,15 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
-include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin'
-include { paramsSummaryMap } from 'plugin/nf-schema'
-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'
+include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin'
+include { paramsSummaryMap } from 'plugin/nf-schema'
+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'
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -25,16 +25,15 @@ include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipelin
*/
workflow PIPELINE_INITIALISATION {
-
take:
- version // boolean: Display version and exit
- validate_params // boolean: Boolean whether to validate parameters against the schema at runtime
+ version // boolean: Display version and exit
+ validate_params // boolean: Boolean whether to validate parameters against the schema at runtime
nextflow_cli_args // array: List of positional nextflow CLI args
- outdir // string: The output directory where the results will be saved
- input // string: Path to input samplesheet
- help // boolean: Display help message and exit
- help_full // boolean: Show the full help message
- show_hidden // boolean: Show hidden parameters in the help message
+ outdir // string: The output directory where the results will be saved
+ input // string: Path to input samplesheet
+ help // boolean: Display help message and exit
+ help_full // boolean: Show the full help message
+ show_hidden // boolean: Show hidden parameters in the help message
main:
@@ -43,11 +42,11 @@ workflow PIPELINE_INITIALISATION {
//
// Print version and exit if required and dump pipeline parameters to JSON file
//
- UTILS_NEXTFLOW_PIPELINE (
+ UTILS_NEXTFLOW_PIPELINE(
version,
true,
outdir,
- workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1
+ workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1,
)
//
@@ -55,7 +54,7 @@ workflow PIPELINE_INITIALISATION {
//
command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir "
- UTILS_NFSCHEMA_PLUGIN (
+ UTILS_NFSCHEMA_PLUGIN(
workflow,
validate_params,
null,
@@ -64,13 +63,13 @@ workflow PIPELINE_INITIALISATION {
show_hidden,
"",
"",
- command
+ command,
)
//
// Check config provided to the pipeline
//
- UTILS_NFCORE_PIPELINE (
+ UTILS_NFCORE_PIPELINE(
nextflow_cli_args
)
@@ -97,15 +96,14 @@ workflow PIPELINE_INITIALISATION {
*/
workflow PIPELINE_COMPLETION {
-
take:
- email // string: email address
- email_on_fail // string: email address sent on pipeline failure
+ email // string: email address
+ email_on_fail // string: email address sent on pipeline failure
plaintext_email // boolean: Send plain-text email instead of HTML
- outdir // path: Path to output directory where results will be published
+ 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
+ hook_url // string: hook URL for notifications
+ multiqc_report // string: Path to MultiQC report
main:
summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
@@ -134,7 +132,7 @@ workflow PIPELINE_COMPLETION {
}
workflow.onError {
- log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting"
+ log.error("Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting")
}
}
@@ -157,19 +155,19 @@ def validateInputSamplesheet(input) {
def (metas, fastqs) = input[1..2]
// Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end
- def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1
+ def endedness_ok = metas.collect { meta -> meta.single_end }.unique().size == 1
if (!endedness_ok) {
error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}")
}
- return [ metas[0], fastqs ]
+ return [metas[0], fastqs]
}
//
// Get attribute from genome config file e.g. fasta
//
def getGenomeAttribute(genomes, attribute) {
if (genomes && genomes.containsKey(attribute)) {
- return genomes[ attribute ]
+ return genomes[attribute]
}
return null
}
@@ -179,11 +177,7 @@ def getGenomeAttribute(genomes, attribute) {
//
def genomeExistsError() {
if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) {
- def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
- " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" +
- " Currently, the available genome keys are:\n" +
- " ${params.genomes.keySet().join(", ")}\n" +
- "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + " Currently, the available genome keys are:\n" + " ${params.genomes.keySet().join(", ")}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
error(error_string)
}
}
@@ -195,11 +189,11 @@ def toolCitationText() {
// Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "",
// Uncomment function in methodsDescriptionText to render in MultiQC report
def citation_text = [
- "Tools used in the workflow included:",
- "FastQC (Andrews 2010),",
- "MultiQC (Ewels et al. 2016)",
- "."
- ].join(' ').trim()
+ "Tools used in the workflow included:",
+ "FastQC (Andrews 2010),",
+ "MultiQC (Ewels et al. 2016)",
+ ".",
+ ].join(' ').trim()
return citation_text
}
@@ -209,9 +203,9 @@ def toolBibliographyText() {
// Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Author (2023) Pub name, Journal, DOI " : "",
// Uncomment function in methodsDescriptionText to render in MultiQC report
def reference_text = [
- "Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/). ",
- "Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354 "
- ].join(' ').trim()
+ "Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/). ",
+ "Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354 ",
+ ].join(' ').trim()
return reference_text
}
@@ -233,7 +227,10 @@ def methodsDescriptionText(mqc_methods_yaml) {
temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")} ), "
}
meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2)
- } else meta["doi_text"] = ""
+ }
+ else {
+ meta["doi_text"] = ""
+ }
meta["nodoi_text"] = meta.manifest_map.doi ? "" : "If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used. "
// Tool references
@@ -247,7 +244,7 @@ def methodsDescriptionText(mqc_methods_yaml) {
def methods_text = mqc_methods_yaml.text
- def engine = new groovy.text.SimpleTemplateEngine()
+ def engine = new groovy.text.SimpleTemplateEngine()
def description_html = engine.createTemplate(methods_text).make(meta)
return description_html.toString()
diff --git a/tests/inputs/fastq.yml b/tests/inputs/fastq.yml
index 52668235..a0033b21 100644
--- a/tests/inputs/fastq.yml
+++ b/tests/inputs/fastq.yml
@@ -6,6 +6,7 @@
organism: Homo sapiens
tag: WES
aligner: bwamem
+ markdup: bamsormadup
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
@@ -14,5 +15,6 @@
organism: Homo sapiens
tag: WES
aligner: bwamem
+ markdup: bamsormadup
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
index 878dab22..998af6b5 100644
--- a/tests/inputs/fastq_rna.yml
+++ b/tests/inputs/fastq_rna.yml
@@ -7,6 +7,7 @@
tag: WES
sample_type: RNA
aligner: star
+ markdup: bamsormadup
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
@@ -16,5 +17,6 @@
tag: WES
sample_type: RNA
aligner: star
+ markdup: bamsormadup
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/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 33c0930b..bfe1a63d 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -260,7 +260,7 @@ workflow PREPROCESSING {
crai,
getGenomeAttribute(meta.genome_data, "fasta"),
getGenomeAttribute(meta.genome_data, "fai"),
- meta.roi ? file(meta.roi, checkIfExists: true) : [],
+ meta.roi && meta.roi != [] ? file(meta.roi, checkIfExists: true) : [],
]
}
.set { ch_cram_crai_fasta_fai_roi }
@@ -285,7 +285,7 @@ workflow PREPROCESSING {
meta,
cram,
crai,
- meta.roi ? file(meta.roi, checkIfExists: true) : [],
+ meta.roi && meta.roi != [] ? file(meta.roi, checkIfExists: true) : [],
getGenomeAttribute(meta.genome_data, "fasta"),
getGenomeAttribute(meta.genome_data, "fai"),
getGenomeAttribute(meta.genome_data, "dict"),
From efb99f01c064e56a97474e776e0cddfb3bcc8260 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 12:57:19 +0100
Subject: [PATCH 151/228] meta fixes
---
assets/schema_input.json | 2 +-
assets/schema_sampleinfo.json | 2 +-
tests/inputs/fastq.yml | 2 ++
tests/inputs/fastq_rna.yml | 2 ++
tests/workflows/preprocessing.nf.test | 9 ++++++---
workflows/preprocessing.nf | 2 +-
6 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/assets/schema_input.json b/assets/schema_input.json
index 59ee5046..a6cd4941 100644
--- a/assets/schema_input.json
+++ b/assets/schema_input.json
@@ -87,7 +87,7 @@
"meta": ["run_coverage"],
"type": "boolean",
"description": "Whether to run coverage analysis for the sample",
- "default": false
+ "default": true
},
"disable_picard_metrics": {
"meta": ["disable_picard_metrics"],
diff --git a/assets/schema_sampleinfo.json b/assets/schema_sampleinfo.json
index 26bb486a..dee4c572 100644
--- a/assets/schema_sampleinfo.json
+++ b/assets/schema_sampleinfo.json
@@ -127,7 +127,7 @@
"meta": ["run_coverage"],
"type": "boolean",
"description": "Whether to run coverage analysis for the sample",
- "default": false
+ "default": true
},
"disable_picard_metrics": {
"meta": ["disable_picard_metrics"],
diff --git a/tests/inputs/fastq.yml b/tests/inputs/fastq.yml
index a0033b21..8195b58b 100644
--- a/tests/inputs/fastq.yml
+++ b/tests/inputs/fastq.yml
@@ -7,6 +7,7 @@
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
@@ -16,5 +17,6 @@
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
index 998af6b5..3945eb53 100644
--- a/tests/inputs/fastq_rna.yml
+++ b/tests/inputs/fastq_rna.yml
@@ -8,6 +8,7 @@
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
@@ -18,5 +19,6 @@
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 f31029f4..dfc856d0 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -23,7 +23,8 @@ nextflow_workflow {
tag: "WES",
sample_type: "DNA",
aligner: "bwamem",
- markdup: "bamsormadup"
+ markdup: "bamsormadup",
+ run_coverage: true
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -91,7 +92,8 @@ nextflow_workflow {
tag: "WGS",
sample_type: "DNA",
aligner: "bwamem",
- markdup: "bamsormadup"
+ markdup: "bamsormadup",
+ run_coverage: true
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -162,7 +164,8 @@ nextflow_workflow {
tag: "WES",
sample_type: "DNA",
aligner: "bwamem",
- markdup: "bamsormadup"
+ markdup: "bamsormadup",
+ run_coverage: true
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index bfe1a63d..16618c2e 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -251,7 +251,7 @@ workflow PREPROCESSING {
*/
FASTQ_TO_CRAM.out.cram_crai
.filter { meta, _cram, _crai ->
- meta.run_coverage.toBoolean()
+ meta.run_coverage && meta.run_coverage.toBoolean()
}
.map { meta, cram, crai ->
return [
From 6614d338d2c15ae4ab22d4c86f138a81e4f4396d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:36:06 +0100
Subject: [PATCH 152/228] bump picard/collectmultiplemetrics module
---
modules.json | 2 +-
.../picard/collectmultiplemetrics/main.nf | 12 +-
.../picard/collectmultiplemetrics/meta.yml | 28 ++++-
.../picard-collectmultiplemetrics.diff | 30 ++++-
.../collectmultiplemetrics/tests/main.nf.test | 6 +-
.../tests/main.nf.test.snap | 54 ++++++---
subworkflows/local/bam_qc/main.nf | 2 +-
tests/subworkflows/local/bam_qc/main.nf.test | 6 +-
.../local/bam_qc/main.nf.test.snap | 106 ++++--------------
9 files changed, 120 insertions(+), 126 deletions(-)
diff --git a/modules.json b/modules.json
index 037ebfe4..5b76e3b7 100644
--- a/modules.json
+++ b/modules.json
@@ -81,7 +81,7 @@
},
"picard/collectmultiplemetrics": {
"branch": "master",
- "git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
+ "git_sha": "74ec93d00bef147da3fb1f2262e8d31c14108f88",
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff"
},
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index 2dc6679d..158a746f 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -13,7 +13,7 @@ process PICARD_COLLECTMULTIPLEMETRICS {
output:
tuple val(meta), path("*_metrics"), emit: metrics
tuple val(meta), path("*.pdf") , emit: pdf, optional: true
- path "versions.yml" , emit: versions
+ 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
@@ -38,11 +38,6 @@ process PICARD_COLLECTMULTIPLEMETRICS {
--OUTPUT ${prefix}.CollectMultipleMetrics \\
$intervals_cmd \\
$reference_cmd
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- picard: \$(picard CollectMultipleMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:)
- END_VERSIONS
"""
stub:
@@ -58,10 +53,5 @@ process PICARD_COLLECTMULTIPLEMETRICS {
touch ${prefix}.CollectMultipleMetrics.quality_by_cycle.pdf
touch ${prefix}.CollectMultipleMetrics.insert_size_histogram.pdf
touch ${prefix}.CollectMultipleMetrics.quality_distribution_metrics
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- picard: \$(echo \$(picard CollectMultipleMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:)
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/picard/collectmultiplemetrics/meta.yml b/modules/nf-core/picard/collectmultiplemetrics/meta.yml
index 3f0bf610..1ea47244 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/meta.yml
+++ b/modules/nf-core/picard/collectmultiplemetrics/meta.yml
@@ -74,13 +74,29 @@ output:
description: PDF plots of metrics
pattern: "*.{pdf}"
ontologies: []
+ versions_picard:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - picard:
+ type: string
+ description: The tool name
+ - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/^Version:*//p'":
+ type: string
+ description: The command used to generate the version of the tool
+
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - picard:
+ type: string
+ description: The tool name
+ - "picard CollectMultipleMetrics --version 2>&1 | sed -n 's/^Version:*//p'":
+ type: string
+ description: The command used to generate the version of the tool
+
authors:
- "@drpatelh"
maintainers:
diff --git a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
index 489076fb..c3cd8e55 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
+++ b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
@@ -11,10 +11,38 @@ Changes in 'picard/collectmultiplemetrics/main.nf':
- 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(fasta) ,path(fai)
++ tuple val(meta) , path(bam), path(bai), path(intervals), path(fasta) ,path(fai), path(dict)
output:
tuple val(meta), path("*_metrics"), emit: metrics
+@@ -23,7 +21,8 @@
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+- def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
++ def intervals_cmd = intervals ? "--INTERVALS ${intervals.join(',')}" : ""
++ 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.'
+@@ -37,8 +36,8 @@
+ $args \\
+ --INPUT $bam \\
+ --OUTPUT ${prefix}.CollectMultipleMetrics \\
+- $reference
+-
++ $intervals_cmd \\
++ $reference_cmd
+ """
+
+ stub:
+@@ -54,6 +53,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 5b67774f..08456941 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test
+++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test
@@ -36,7 +36,7 @@ nextflow_process {
{ assert snapshot(
process.out.metrics[0][1].collect { file(it).name }.toSorted(),
process.out.pdf[0][1].collect { file(it).name }.toSorted(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -66,7 +66,7 @@ nextflow_process {
{ assert snapshot(
process.out.metrics[0][1].collect { file(it).name }.toSorted(),
process.out.pdf[0][1].collect { file(it).name }.toSorted(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -102,7 +102,7 @@ nextflow_process {
{ assert snapshot(
process.out.metrics[0][1].collect { file(it).name }.toSorted(),
process.out.pdf[0][1].collect { file(it).name }.toSorted(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).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 5a1de114..1acf3776 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap
+++ b/modules/nf-core/picard/collectmultiplemetrics/tests/main.nf.test.snap
@@ -15,15 +15,21 @@
"test.CollectMultipleMetrics.quality_distribution.pdf",
"test.CollectMultipleMetrics.read_length_histogram.pdf"
],
- [
- "versions.yml:md5,aca7ca0dc0012ee97698236828ba242a"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTMULTIPLEMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:41:26.126816186"
+ "timestamp": "2026-02-02T10:22:21.230301646"
},
"test-picard-collectmultiplemetrics-cram": {
"content": [
@@ -41,15 +47,21 @@
"test.CollectMultipleMetrics.quality_distribution.pdf",
"test.CollectMultipleMetrics.read_length_histogram.pdf"
],
- [
- "versions.yml:md5,aca7ca0dc0012ee97698236828ba242a"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTMULTIPLEMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:41:50.933556225"
+ "timestamp": "2026-02-02T10:23:52.23446844"
},
"test-picard-collectmultiplemetrics-nofasta": {
"content": [
@@ -67,14 +79,20 @@
"test.CollectMultipleMetrics.quality_distribution.pdf",
"test.CollectMultipleMetrics.read_length_histogram.pdf"
],
- [
- "versions.yml:md5,aca7ca0dc0012ee97698236828ba242a"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTMULTIPLEMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:41:38.213084333"
+ "timestamp": "2026-02-02T10:23:27.387621193"
}
}
\ No newline at end of file
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index ba8f4b5f..ebea484d 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -35,7 +35,7 @@ workflow BAM_QC {
ch_bam_bai_roi_fasta_fai_dict
.filter { meta, _bam, _bai, _roi, _fasta, _fai, _dict ->
- meta.disable_picard_metrics != true
+ !meta.disable_picard_metrics
}
.set { ch_picard }
diff --git a/tests/subworkflows/local/bam_qc/main.nf.test b/tests/subworkflows/local/bam_qc/main.nf.test
index 8cd0106b..acb2f53a 100644
--- a/tests/subworkflows/local/bam_qc/main.nf.test
+++ b/tests/subworkflows/local/bam_qc/main.nf.test
@@ -15,7 +15,7 @@ nextflow_workflow {
"""
// [meta, bam, bai, roi, fasta, fai, dict]
input[0] = Channel.of([
- [ id:'test', single_end:false ],
+ [ id:'test', single_end:false, disable_picard_metrics:false ],
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/cram/sample1.sorted.cram", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/cram/sample1.sorted.cram.crai", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
@@ -47,7 +47,7 @@ nextflow_workflow {
"""
// [meta, bam, bai, roi, fasta, fai, dict]
input[0] = Channel.of([
- [ id:'test', single_end:false ],
+ [ id:'test', single_end:false, disable_picard_metrics:false ],
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/cram/sample1.sorted.cram", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/cram/sample1.sorted.cram.crai", checkIfExists: true),
[],
@@ -78,7 +78,7 @@ nextflow_workflow {
"""
// [meta, bam, bai, roi, fasta, fai, dict]
input[0] = Channel.of([
- [ id:'test', single_end:false ],
+ [ id:'test', single_end:false, disable_picard_metrics:true ],
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/cram/sample1.sorted.cram", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/cram/sample1.sorted.cram.crai", checkIfExists: true),
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
diff --git a/tests/subworkflows/local/bam_qc/main.nf.test.snap b/tests/subworkflows/local/bam_qc/main.nf.test.snap
index 2403cda0..3392b3dd 100644
--- a/tests/subworkflows/local/bam_qc/main.nf.test.snap
+++ b/tests/subworkflows/local/bam_qc/main.nf.test.snap
@@ -3,43 +3,13 @@
"content": [
{
"picard_hsmetrics": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.CollectHsMetrics.coverage_metrics"
- ]
+
],
"picard_multiplemetrics": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.CollectMultipleMetrics.alignment_summary_metrics",
- "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics",
- "test.CollectMultipleMetrics.insert_size_metrics",
- "test.CollectMultipleMetrics.quality_by_cycle_metrics",
- "test.CollectMultipleMetrics.quality_distribution_metrics"
- ]
- ]
+
],
"picard_multiplemetrics_pdf": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf",
- "test.CollectMultipleMetrics.insert_size_histogram.pdf",
- "test.CollectMultipleMetrics.quality_by_cycle.pdf",
- "test.CollectMultipleMetrics.quality_distribution.pdf",
- "test.CollectMultipleMetrics.read_length_histogram.pdf"
- ]
- ]
+
],
"picard_wgsmetrics": [
@@ -48,7 +18,8 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": false
},
"test.flagstat:md5,167e69b479663a15194ddf56cbc9e60e"
]
@@ -57,7 +28,8 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": false
},
"test.idxstats:md5,081d0431383fb7ea6b51b7077c6ec93c"
]
@@ -66,24 +38,23 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": false
},
"test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
],
"versions": [
"versions.yml:md5,15389a9f97668f320b9628da1903a93b",
- "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5",
- "versions.yml:md5,593804078c060457d011f7f6b650e500",
- "versions.yml:md5,f5507938ec419f55239e3faa9f99376f"
+ "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-02T12:48:55.096074"
+ "timestamp": "2026-02-10T19:21:23.498543"
},
"Bam QC - Samtools": {
"content": [
@@ -146,49 +117,20 @@
],
"picard_multiplemetrics": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.CollectMultipleMetrics.alignment_summary_metrics",
- "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics",
- "test.CollectMultipleMetrics.insert_size_metrics",
- "test.CollectMultipleMetrics.quality_by_cycle_metrics",
- "test.CollectMultipleMetrics.quality_distribution_metrics"
- ]
- ]
+
],
"picard_multiplemetrics_pdf": [
- [
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf",
- "test.CollectMultipleMetrics.insert_size_histogram.pdf",
- "test.CollectMultipleMetrics.quality_by_cycle.pdf",
- "test.CollectMultipleMetrics.quality_distribution.pdf",
- "test.CollectMultipleMetrics.read_length_histogram.pdf"
- ]
- ]
+
],
"picard_wgsmetrics": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.CollectWgsMetrics.coverage_metrics"
- ]
+
],
"samtools_flagstat": [
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": false
},
"test.flagstat:md5,167e69b479663a15194ddf56cbc9e60e"
]
@@ -197,7 +139,8 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": false
},
"test.idxstats:md5,081d0431383fb7ea6b51b7077c6ec93c"
]
@@ -206,23 +149,22 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": false
},
"test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
],
"versions": [
"versions.yml:md5,15389a9f97668f320b9628da1903a93b",
- "versions.yml:md5,3d2d9acb75406ea94b547be23a45601b",
- "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5",
- "versions.yml:md5,f5507938ec419f55239e3faa9f99376f"
+ "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-12-02T12:49:52.298773"
+ "timestamp": "2026-02-10T19:25:10.626677"
}
}
\ No newline at end of file
From f4fc5c7b1a419c9eca79611b2f88543eb80bd06d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:37:37 +0100
Subject: [PATCH 153/228] bump picard/collecthsmetrics module
---
modules.json | 2 +-
.../nf-core/picard/collecthsmetrics/main.nf | 12 +-
.../nf-core/picard/collecthsmetrics/meta.yml | 27 +++-
.../collecthsmetrics/tests/main.nf.test | 12 +-
.../collecthsmetrics/tests/main.nf.test.snap | 145 +++++++++++++-----
5 files changed, 132 insertions(+), 66 deletions(-)
diff --git a/modules.json b/modules.json
index 5b76e3b7..d8bc7b60 100644
--- a/modules.json
+++ b/modules.json
@@ -75,7 +75,7 @@
},
"picard/collecthsmetrics": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "976ed20e328a92cb24ab6c63a8983ed31bf48469",
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff"
},
diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf
index a1dc56d8..63b3479c 100644
--- a/modules/nf-core/picard/collecthsmetrics/main.nf
+++ b/modules/nf-core/picard/collecthsmetrics/main.nf
@@ -12,7 +12,7 @@ process PICARD_COLLECTHSMETRICS {
output:
tuple val(meta), path("*_metrics") , emit: metrics
- path "versions.yml" , emit: versions
+ 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
@@ -59,21 +59,11 @@ process PICARD_COLLECTHSMETRICS {
--INPUT $bam \\
--OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- picard: \$(echo \$(picard CollectHsMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:)
- END_VERSIONS
"""
stub:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
touch ${prefix}.CollectHsMetrics.coverage_metrics
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- picard: \$(echo \$(picard CollectHsMetrics --version 2>&1) | grep -o 'Version:.*' | cut -f2- -d:)
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/picard/collecthsmetrics/meta.yml b/modules/nf-core/picard/collecthsmetrics/meta.yml
index 511ae959..a21aa6ec 100644
--- a/modules/nf-core/picard/collecthsmetrics/meta.yml
+++ b/modules/nf-core/picard/collecthsmetrics/meta.yml
@@ -99,13 +99,28 @@ output:
description: Alignment metrics files generated by picard
pattern: "*_{metrics}"
ontologies: []
+ versions_picard:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - picard:
+ type: string
+ description: The tool name
+ - "picard CollectHsMetrics --version 2>&1 | sed -n 's/^Version:*//p'":
+ type: string
+ description: The command used to generate the version of the tool
+
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - picard:
+ type: string
+ description: The tool name
+ - "picard CollectHsMetrics --version 2>&1 | sed -n 's/^Version:*//p'":
+ type: string
+ description: The command used to generate the version of the tool
authors:
- "@projectoriented"
- "@matthdsm"
diff --git a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test
index fe40e7b0..07a9ccf4 100644
--- a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test
+++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test
@@ -39,7 +39,7 @@ nextflow_process {
file(process.out.metrics[0][1]).name,
size,
lines,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -77,7 +77,7 @@ nextflow_process {
file(process.out.metrics[0][1]).name,
size,
lines,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -110,7 +110,7 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert snapshot(process.out.versions).match("versions") }
+ { assert snapshot(process.out).match() }
)
}
@@ -146,7 +146,7 @@ nextflow_process {
file(process.out.metrics[0][1]).name,
size,
lines,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -185,7 +185,7 @@ nextflow_process {
file(process.out.metrics[0][1]).name,
size,
lines,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -224,7 +224,7 @@ nextflow_process {
file(process.out.metrics[0][1]).name,
size,
lines,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).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 11b0f7c5..74d9441f 100644
--- a/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap
+++ b/modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap
@@ -105,15 +105,64 @@
"88\t0\t0",
"89\t0\t0"
],
- [
- "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTHSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
+ ],
+ "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": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.CollectHsMetrics.coverage_metrics:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "versions_picard": [
+ [
+ "PICARD_COLLECTHSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:37:59.62099935"
+ "timestamp": "2026-01-05T17:03:13.333276975"
},
"sarscov2 - bam - gzippedfa": {
"content": [
@@ -221,27 +270,21 @@
"88\t0\t0",
"89\t0\t0"
],
- [
- "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
- ]
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-15T10:37:32.831030701"
- },
- "versions": {
- "content": [
- [
- "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTHSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:37:42.492104283"
+ "timestamp": "2026-01-05T17:03:04.382110367"
},
"sarscov2 - bam - samebed": {
"content": [
@@ -349,15 +392,21 @@
"88\t0\t0",
"89\t0\t0"
],
- [
- "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTHSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:38:39.302597954"
+ "timestamp": "2026-01-05T17:13:22.872920293"
},
"sarscov2 - bam": {
"content": [
@@ -465,15 +514,21 @@
"88\t0\t0",
"89\t0\t0"
],
- [
- "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTHSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:37:15.861292725"
+ "timestamp": "2026-01-05T17:02:47.615784738"
},
"sarscov2 - bam - bed": {
"content": [
@@ -581,14 +636,20 @@
"88\t0\t0",
"89\t0\t0"
],
- [
- "versions.yml:md5,533cf1e35d36fdacbb762f5df2e1b322"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTHSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:38:18.912909604"
+ "timestamp": "2026-01-05T17:13:02.812282052"
}
}
\ No newline at end of file
From 60deb6a75c48d613d75a15b039fb8e43fe0f113a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:38:35 +0100
Subject: [PATCH 154/228] bump picard/collectwgsmetrics module
---
modules.json | 2 +-
.../nf-core/picard/collectwgsmetrics/main.nf | 11 +-----
.../nf-core/picard/collectwgsmetrics/meta.yml | 27 ++++++++++----
.../collectwgsmetrics/tests/main.nf.test | 4 +--
.../collectwgsmetrics/tests/main.nf.test.snap | 36 ++++++++++++-------
5 files changed, 49 insertions(+), 31 deletions(-)
diff --git a/modules.json b/modules.json
index d8bc7b60..a18151a1 100644
--- a/modules.json
+++ b/modules.json
@@ -87,7 +87,7 @@
},
"picard/collectwgsmetrics": {
"branch": "master",
- "git_sha": "df124e87c74d8b40285199f8cc20151f5aa57255",
+ "git_sha": "66d5808eaaabd9de8997c4c31a9e8cdd3b56c080",
"installed_by": ["modules"],
"patch": "modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff"
},
diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf
index cd4a7711..63330d22 100644
--- a/modules/nf-core/picard/collectwgsmetrics/main.nf
+++ b/modules/nf-core/picard/collectwgsmetrics/main.nf
@@ -13,7 +13,7 @@ process PICARD_COLLECTWGSMETRICS {
output:
tuple val(meta), path("*_metrics"), emit: metrics
- path "versions.yml" , emit: versions
+ 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
@@ -38,11 +38,6 @@ process PICARD_COLLECTWGSMETRICS {
--REFERENCE_SEQUENCE ${fasta} \\
$interval
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- picard: \$(picard CollectWgsMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:)
- END_VERSIONS
"""
stub:
@@ -50,9 +45,5 @@ process PICARD_COLLECTWGSMETRICS {
"""
touch ${prefix}.CollectWgsMetrics.coverage_metrics
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- picard: \$(picard CollectWgsMetrics --version 2>&1 | grep -o 'Version.*' | cut -f2- -d:)
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/picard/collectwgsmetrics/meta.yml b/modules/nf-core/picard/collectwgsmetrics/meta.yml
index a27e0a88..c59811d5 100644
--- a/modules/nf-core/picard/collectwgsmetrics/meta.yml
+++ b/modules/nf-core/picard/collectwgsmetrics/meta.yml
@@ -69,13 +69,28 @@ output:
description: Alignment metrics files generated by picard
pattern: "*_{metrics}"
ontologies: []
+ versions_picard:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - picard:
+ type: string
+ description: The tool name
+ - "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:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - picard:
+ type: string
+ description: The tool name
+ - "picard CollectWgsMetrics --version 2>&1 | sed -n 's/^Version:*//p'":
+ type: string
+ description: The command used to generate the version of the tool
authors:
- "@drpatelh"
- "@flowuenne"
diff --git a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test
index a3984566..d6a60e6b 100644
--- a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test
+++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test
@@ -38,7 +38,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -73,7 +73,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
file(process.out.metrics[0][1]).text.contains('coverage high_quality_coverage_count'),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).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 d944d96b..375c2ef9 100644
--- a/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap
+++ b/modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap
@@ -2,27 +2,39 @@
"test-picard-collectwgsmetrics-with-interval": {
"content": [
true,
- [
- "versions.yml:md5,0fa1034c5831e54d4534e6052a8d6b61"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTWGSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:45:19.40801445"
+ "timestamp": "2026-02-02T14:52:55.091876466"
},
"test-picard-collectwgsmetrics": {
"content": [
true,
- [
- "versions.yml:md5,0fa1034c5831e54d4534e6052a8d6b61"
- ]
+ {
+ "versions_picard": [
+ [
+ "PICARD_COLLECTWGSMETRICS",
+ "picard",
+ "3.4.0"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-15T10:44:57.689335695"
+ "timestamp": "2026-02-02T14:52:11.334274481"
}
}
\ No newline at end of file
From d66d99c7fc81ff54824efb2c971c68348b4b0674 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:43:04 +0100
Subject: [PATCH 155/228] bam_qc -> topic
---
modules.json | 6 +-
modules/nf-core/samtools/flagstat/main.nf | 12 +--
modules/nf-core/samtools/flagstat/meta.yml | 33 +++++---
.../samtools/flagstat/tests/main.nf.test.snap | 40 +++++++---
modules/nf-core/samtools/idxstats/main.nf | 12 +--
modules/nf-core/samtools/idxstats/meta.yml | 29 +++++--
.../samtools/idxstats/tests/main.nf.test | 10 ++-
.../samtools/idxstats/tests/main.nf.test.snap | 80 ++++++++-----------
modules/nf-core/samtools/stats/main.nf | 4 +-
modules/nf-core/samtools/stats/meta.yml | 17 ++--
subworkflows/local/bam_qc/main.nf | 10 +--
workflows/preprocessing.nf | 1 -
12 files changed, 132 insertions(+), 122 deletions(-)
diff --git a/modules.json b/modules.json
index a18151a1..744675f8 100644
--- a/modules.json
+++ b/modules.json
@@ -105,12 +105,12 @@
},
"samtools/flagstat": {
"branch": "master",
- "git_sha": "e334e12a1e985adc5ffc3fc78a68be1de711de45",
+ "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9",
"installed_by": ["modules"]
},
"samtools/idxstats": {
"branch": "master",
- "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
+ "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9",
"installed_by": ["modules"]
},
"samtools/sormadup": {
@@ -127,7 +127,7 @@
},
"samtools/stats": {
"branch": "master",
- "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
+ "git_sha": "fe93fde0845f907fc91ad7cc7d797930408824df",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/stats/samtools-stats.diff"
},
diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf
index f148f56b..0cfb7e87 100644
--- a/modules/nf-core/samtools/flagstat/main.nf
+++ b/modules/nf-core/samtools/flagstat/main.nf
@@ -12,7 +12,7 @@ process SAMTOOLS_FLAGSTAT {
output:
tuple val(meta), path("*.flagstat"), emit: flagstat
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -25,11 +25,6 @@ process SAMTOOLS_FLAGSTAT {
--threads ${task.cpus} \\
$bam \\
> ${prefix}.flagstat
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
@@ -48,10 +43,5 @@ process SAMTOOLS_FLAGSTAT {
850000 + 0 with mate mapped to a different chr
50000 + 0 with mate mapped to a different chr (mapQ>=5)
END_FLAGSTAT
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml
index ebbc15f2..8caa1bcc 100644
--- a/modules/nf-core/samtools/flagstat/meta.yml
+++ b/modules/nf-core/samtools/flagstat/meta.yml
@@ -1,6 +1,6 @@
name: samtools_flagstat
-description: Counts the number of alignments in a BAM/CRAM/SAM file for each FLAG
- type
+description: Counts the number of alignments in a BAM/CRAM/SAM file for each
+ FLAG type
keywords:
- stats
- mapping
@@ -17,7 +17,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
identifier: biotools:samtools
input:
- - meta:
@@ -47,13 +48,27 @@ output:
description: File containing samtools flagstat output
pattern: "*.{flagstat}"
ontologies: []
+ 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:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${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:
- "@drpatelh"
maintainers:
diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
index 0a0a9b15..f5c882da 100644
--- a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap
@@ -12,7 +12,11 @@
]
],
"1": [
- "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
+ [
+ "SAMTOOLS_FLAGSTAT",
+ "samtools",
+ "1.22.1"
+ ]
],
"flagstat": [
[
@@ -23,16 +27,20 @@
"test.flagstat:md5,67394650dbae96d1a4fcc70484822159"
]
],
- "versions": [
- "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_FLAGSTAT",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-15T15:02:00.813612"
+ "timestamp": "2026-02-03T11:14:30.820969684"
},
"BAM": {
"content": [
@@ -47,7 +55,11 @@
]
],
"1": [
- "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
+ [
+ "SAMTOOLS_FLAGSTAT",
+ "samtools",
+ "1.22.1"
+ ]
],
"flagstat": [
[
@@ -58,15 +70,19 @@
"test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783"
]
],
- "versions": [
- "versions.yml:md5,bdc0bfb2b0542580e7cd65e80d8570bc"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_FLAGSTAT",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-15T15:01:55.232954"
+ "timestamp": "2026-02-03T11:14:25.581619424"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf
index 9181a1a5..d5b70a7f 100644
--- a/modules/nf-core/samtools/idxstats/main.nf
+++ b/modules/nf-core/samtools/idxstats/main.nf
@@ -12,7 +12,7 @@ process SAMTOOLS_IDXSTATS {
output:
tuple val(meta), path("*.idxstats"), emit: idxstats
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -27,11 +27,6 @@ process SAMTOOLS_IDXSTATS {
--threads ${task.cpus-1} \\
$bam \\
> ${prefix}.idxstats
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
@@ -39,10 +34,5 @@ process SAMTOOLS_IDXSTATS {
"""
touch ${prefix}.idxstats
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml
index 96d42746..fd153841 100644
--- a/modules/nf-core/samtools/idxstats/meta.yml
+++ b/modules/nf-core/samtools/idxstats/meta.yml
@@ -17,7 +17,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
identifier: biotools:samtools
input:
- - meta:
@@ -47,13 +48,27 @@ output:
description: File containing samtools idxstats output
pattern: "*.{idxstats}"
ontologies: []
+ 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:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${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:
- "@drpatelh"
maintainers:
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test
index 5fd1fc78..c990cd55 100644
--- a/modules/nf-core/samtools/idxstats/tests/main.nf.test
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test
@@ -25,7 +25,10 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(
+ process.out.idxstats,
+ process.out.findAll { key, val -> key.startsWith('versions') }
+ ).match() }
)
}
}
@@ -47,7 +50,10 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(
+ process.out.idxstats,
+ process.out.findAll { key, val -> key.startsWith('versions') }
+ ).match() }
)
}
}}
diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
index d3e785e0..19a54c7c 100644
--- a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap
@@ -1,72 +1,56 @@
{
"bam - stub": {
"content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
- ],
- "idxstats": [
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "SAMTOOLS_IDXSTATS",
+ "samtools",
+ "1.22.1"
]
- ],
- "versions": [
- "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-10T13:47:35.796569"
+ "timestamp": "2026-02-02T16:21:46.333090477"
},
"bam": {
"content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
+ ]
+ ],
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
- ]
- ],
- "1": [
- "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
- ],
- "idxstats": [
+ "versions_samtools": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.idxstats:md5,df60a8c8d6621100d05178c93fb053a2"
+ "SAMTOOLS_IDXSTATS",
+ "samtools",
+ "1.22.1"
]
- ],
- "versions": [
- "versions.yml:md5,6da44e5235401559cea62052bdc0197b"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-10T13:47:31.86415"
+ "timestamp": "2026-02-02T16:21:41.063422521"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf
index 7b070ac3..f9032148 100644
--- a/modules/nf-core/samtools/stats/main.nf
+++ b/modules/nf-core/samtools/stats/main.nf
@@ -18,11 +18,13 @@ process SAMTOOLS_STATS {
task.ext.when == null || task.ext.when
script:
- def prefix = task.ext.prefix ?: "${meta.id}"
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
def reference = fasta ? "--reference ${fasta}" : ""
"""
samtools \\
stats \\
+ ${args} \\
--threads ${task.cpus} \\
${reference} \\
${input} \\
diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml
index a20509ae..5c59cce4 100644
--- a/modules/nf-core/samtools/stats/meta.yml
+++ b/modules/nf-core/samtools/stats/meta.yml
@@ -62,21 +62,22 @@ output:
- samtools:
type: string
description: Name of the tool
- - samtools version | sed "1!d;s/.* //:
- type: string
- description: The command used to generate the version 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}:
type: string
- description: The process the versions were collected from
+ description: Name of the process
- samtools:
type: string
- description: The tool name
- - samtools version | sed "1!d;s/.* //:
- type: string
- description: The command used to generate the version of the tool
+ description: Name of the tool
+ - samtools version | sed "1!d;s/.* //":
+ type: eval
+ description: The expression to obtain the version of the tool
+
authors:
- "@drpatelh"
- "@FriederikeHanssen"
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index ebea484d..d6e1c8bd 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -13,8 +13,6 @@ workflow BAM_QC {
ch_bam_bai_roi_fasta_fai_dict // channel: [ val(meta), path(bam), path(bai), path(roi), path(fasta), path(fai), path(dict)]
main:
- ch_versions = channel.empty()
-
ch_bam_bai_roi_fasta_fai_dict
.map { meta, bam, bai, _roi, fasta, fai, _dict ->
return [meta, bam, bai, fasta, fai]
@@ -23,10 +21,7 @@ workflow BAM_QC {
SAMTOOLS_STATS(ch_bam_bai_fasta_fai)
SAMTOOLS_FLAGSTAT(ch_bam_bai_fasta_fai)
- ch_versions = ch_versions.mix(SAMTOOLS_FLAGSTAT.out.versions.first())
-
SAMTOOLS_IDXSTATS(ch_bam_bai_fasta_fai)
- ch_versions = ch_versions.mix(SAMTOOLS_IDXSTATS.out.versions.first())
ch_picard_hsmetrics = channel.empty()
ch_picard_multiplemetrics = channel.empty()
@@ -40,7 +35,6 @@ workflow BAM_QC {
.set { ch_picard }
PICARD_COLLECTMULTIPLEMETRICS(ch_picard)
- ch_versions = ch_versions.mix(PICARD_COLLECTMULTIPLEMETRICS.out.versions.first())
ch_picard_multiplemetrics = PICARD_COLLECTMULTIPLEMETRICS.out.metrics
ch_picard_multiplemetrics_pdf = PICARD_COLLECTMULTIPLEMETRICS.out.pdf
@@ -54,11 +48,10 @@ workflow BAM_QC {
.set { ch_picard_coverage }
PICARD_COLLECTWGSMETRICS(ch_picard_coverage.wgsmetrics, [])
- ch_versions = ch_versions.mix(PICARD_COLLECTWGSMETRICS.out.versions.first())
ch_picard_wgsmetrics = PICARD_COLLECTWGSMETRICS.out.metrics
PICARD_COLLECTHSMETRICS(ch_picard_coverage.hsmetrics)
- ch_versions = ch_versions.mix(PICARD_COLLECTHSMETRICS.out.versions.first())
+ ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
emit:
@@ -69,5 +62,4 @@ workflow BAM_QC {
picard_multiplemetrics_pdf = ch_picard_multiplemetrics_pdf
picard_wgsmetrics = ch_picard_wgsmetrics
picard_hsmetrics = ch_picard_hsmetrics
- versions = ch_versions
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 16618c2e..e7af9c5d 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -303,7 +303,6 @@ workflow PREPROCESSING {
BAM_QC.out.picard_wgsmetrics,
BAM_QC.out.picard_hsmetrics,
)
- ch_versions = ch_versions.mix(BAM_QC.out.versions)
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From 39a4884cfb3bf4d643bbf0a99a37826f7569b39b Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:48:03 +0100
Subject: [PATCH 156/228] bump mqc module
---
modules.json | 2 +-
modules/nf-core/multiqc/meta.yml | 27 +++++++++++++++++++++++++--
workflows/preprocessing.nf | 2 +-
3 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/modules.json b/modules.json
index 744675f8..2ac331be 100644
--- a/modules.json
+++ b/modules.json
@@ -69,7 +69,7 @@
},
"multiqc": {
"branch": "master",
- "git_sha": "9656d955b700a8707c4a67821ab056f8c1095675",
+ "git_sha": "575e1a4b51a9bad7a8cd1316a88fb85684ef7c7b",
"installed_by": ["modules"],
"patch": "modules/nf-core/multiqc/multiqc.diff"
},
diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml
index e4b8f94d..9fd34f37 100644
--- a/modules/nf-core/multiqc/meta.yml
+++ b/modules/nf-core/multiqc/meta.yml
@@ -71,7 +71,7 @@ output:
- "*_plots":
type: file
description: Plots created by MultiQC
- pattern: "*_data"
+ pattern: "*_plots"
ontologies: []
versions:
- - ${task.process}:
@@ -83,7 +83,6 @@ output:
- multiqc --version | sed "s/.* //g":
type: eval
description: The expression to obtain the version of the tool
-
authors:
- "@abhi18av"
- "@bunop"
@@ -94,3 +93,27 @@ maintainers:
- "@bunop"
- "@drpatelh"
- "@jfy133"
+containers:
+ conda:
+ linux/amd64:
+ lock_file: https://wave.seqera.io/v1alpha1/builds/bd-ee7739d47738383b_1/condalock
+ linux/arm64:
+ lock_file: https://wave.seqera.io/v1alpha1/builds/bd-58d7dee710ab3aa8_1/condalock
+ docker:
+ linux/amd64:
+ build_id: bd-ee7739d47738383b_1
+ name: community.wave.seqera.io/library/multiqc:1.33--ee7739d47738383b
+ scanId: sc-6ddec592dcadd583_4
+ linux/arm64:
+ build_id: bd-58d7dee710ab3aa8_1
+ name: community.wave.seqera.io/library/multiqc:1.33--58d7dee710ab3aa8
+ scanId: sc-a04c42273e34c55c_2
+ singularity:
+ linux/amd64:
+ build_id: bd-e3576ddf588fa00d_1
+ https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/34/34e733a9ae16a27e80fe00f863ea1479c96416017f24a907996126283e7ecd4d/data
+ name: oras://community.wave.seqera.io/library/multiqc:1.33--e3576ddf588fa00d
+ linux/arm64:
+ build_id: bd-2537ca5f8445e3c2_1
+ https: https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/78/78b89e91d89e9cc99ad5ade5be311f347838cb2acbfb4f13bc343b170be09ce4/data
+ name: oras://community.wave.seqera.io/library/multiqc:1.33--2537ca5f8445e3c2
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index e7af9c5d..365327af 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -285,7 +285,7 @@ workflow PREPROCESSING {
meta,
cram,
crai,
- meta.roi && meta.roi != [] ? file(meta.roi, checkIfExists: true) : [],
+ (meta.roi && meta.roi) != [] ? file(meta.roi, checkIfExists: true) : [],
getGenomeAttribute(meta.genome_data, "fasta"),
getGenomeAttribute(meta.genome_data, "fai"),
getGenomeAttribute(meta.genome_data, "dict"),
From 6e56545a364de08884152240aa8934a6368f6b9d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:50:01 +0100
Subject: [PATCH 157/228] bump star/align module
---
modules.json | 2 +-
modules/nf-core/star/align/main.nf | 18 +-
modules/nf-core/star/align/meta.yml | 68 +-
modules/nf-core/star/align/star-align.diff | 2 +-
modules/nf-core/star/align/tests/main.nf.test | 10 +-
.../star/align/tests/main.nf.test.snap | 670 +++++++++++++-----
subworkflows/local/fastq_align_rna/main.nf | 1 -
7 files changed, 546 insertions(+), 225 deletions(-)
diff --git a/modules.json b/modules.json
index 2ac331be..aa368218 100644
--- a/modules.json
+++ b/modules.json
@@ -139,7 +139,7 @@
},
"star/align": {
"branch": "master",
- "git_sha": "ce9e10540a1555145ddd1ddd8b15f7443cbe1449",
+ "git_sha": "d6419d592de78e193625b209c1d0a5cc09206df3",
"installed_by": ["modules"],
"patch": "modules/nf-core/star/align/star-align.diff"
},
diff --git a/modules/nf-core/star/align/main.nf b/modules/nf-core/star/align/main.nf
index 034f91df..653996ad 100644
--- a/modules/nf-core/star/align/main.nf
+++ b/modules/nf-core/star/align/main.nf
@@ -16,7 +16,9 @@ process STAR_ALIGN {
tuple val(meta), path('*Log.final.out') , emit: log_final
tuple val(meta), path('*Log.out') , emit: log_out
tuple val(meta), path('*Log.progress.out'), emit: log_progress
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('star'), eval('STAR --version | sed "s/STAR_//"'), emit: versions_star, topic: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools --version | sed -n '1s/samtools //p'"), emit: versions_samtools, topic: versions
+ tuple val("${task.process}"), val('gawk'), eval("gawk --version | sed -n '1s/GNU Awk \\([0-9.]*\\).*/\\1/p'"), emit: versions_gawk, topic: versions
tuple val(meta), path('*d.out.bam') , optional:true, emit: bam
tuple val(meta), path("${prefix}.sortedByCoord.out.bam") , optional:true, emit: bam_sorted
@@ -68,13 +70,6 @@ process STAR_ALIGN {
mv ${prefix}.Unmapped.out.mate2 ${prefix}.unmapped_2.fastq
gzip ${prefix}.unmapped_2.fastq
fi
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- star: \$(STAR --version | sed -e "s/STAR_//g")
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//')
- END_VERSIONS
"""
stub:
@@ -97,12 +92,5 @@ process STAR_ALIGN {
touch ${prefix}.out.sam
touch ${prefix}.Signal.UniqueMultiple.str1.out.wig
touch ${prefix}.Signal.UniqueMultiple.str1.out.bg
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- star: \$(STAR --version | sed -e "s/STAR_//g")
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- gawk: \$(echo \$(gawk --version 2>&1) | sed 's/^.*GNU Awk //; s/, .*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/star/align/meta.yml b/modules/nf-core/star/align/meta.yml
index 1ee46905..d1441570 100644
--- a/modules/nf-core/star/align/meta.yml
+++ b/modules/nf-core/star/align/meta.yml
@@ -89,13 +89,37 @@ output:
description: STAR log progress file
pattern: "*Log.progress.out"
ontologies: []
- versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ versions_star:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - star:
+ type: string
+ description: The name of the tool
+ - STAR --version | sed "s/STAR_//":
+ 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 -n '1s/samtools //p':
+ type: eval
+ description: The expression to obtain the version of the tool
+ versions_gawk:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - gawk:
+ type: string
+ description: The name of the tool
+ - gawk --version | sed -n '1s/GNU Awk \([0-9.]*\).*/\1/p':
+ type: eval
+ description: The expression to obtain the version of the tool
+
bam:
- - meta:
type: map
@@ -243,6 +267,36 @@ output:
description: STAR output bedGraph format file(s) (optional)
pattern: "*.bg"
ontologies: []
+topics:
+ versions:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - star:
+ type: string
+ description: The name of the tool
+ - STAR --version | sed "s/STAR_//":
+ 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 -n '1s/samtools //p':
+ type: eval
+ description: The expression to obtain the version of the tool
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - gawk:
+ type: string
+ description: The name of the tool
+ - gawk --version | sed -n '1s/GNU Awk \([0-9.]*\).*/\1/p':
+ type: eval
+ description: The expression to obtain the version of the tool
+
authors:
- "@kevinmenden"
- "@drpatelh"
diff --git a/modules/nf-core/star/align/star-align.diff b/modules/nf-core/star/align/star-align.diff
index 398da009..0c9c6621 100644
--- a/modules/nf-core/star/align/star-align.diff
+++ b/modules/nf-core/star/align/star-align.diff
@@ -16,7 +16,7 @@ Changes in 'star/align/main.nf':
val seq_platform
val seq_center
-@@ -44,7 +41,7 @@
+@@ -46,7 +43,7 @@
def reads1 = []
def reads2 = []
meta.single_end ? [reads].flatten().each{ read -> reads1 << read} : reads.eachWithIndex{ v, ix -> ( ix & 1 ? reads2 : reads1) << v }
diff --git a/modules/nf-core/star/align/tests/main.nf.test b/modules/nf-core/star/align/tests/main.nf.test
index a62c17db..da0cc07e 100644
--- a/modules/nf-core/star/align/tests/main.nf.test
+++ b/modules/nf-core/star/align/tests/main.nf.test
@@ -65,7 +65,7 @@ nextflow_process {
process.out.spl_junc_tab,
process.out.tab,
process.out.wig,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -130,7 +130,7 @@ nextflow_process {
process.out.spl_junc_tab,
process.out.tab,
process.out.wig,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -194,7 +194,7 @@ nextflow_process {
process.out.spl_junc_tab,
process.out.tab,
process.out.wig,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -259,7 +259,7 @@ nextflow_process {
process.out.spl_junc_tab,
process.out.tab,
process.out.wig,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -326,7 +326,7 @@ nextflow_process {
process.out.spl_junc_tab,
process.out.tab,
process.out.wig,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
diff --git a/modules/nf-core/star/align/tests/main.nf.test.snap b/modules/nf-core/star/align/tests/main.nf.test.snap
index a1ec3a3d..2b5755db 100644
--- a/modules/nf-core/star/align/tests/main.nf.test.snap
+++ b/modules/nf-core/star/align/tests/main.nf.test.snap
@@ -21,6 +21,27 @@
]
],
"10": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "11": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ [
+ "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ ]
+ ]
+ ],
+ "12": [
[
{
"id": "test",
@@ -33,7 +54,7 @@
]
]
],
- "11": [
+ "13": [
[
{
"id": "test",
@@ -42,7 +63,7 @@
"test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "12": [
+ "14": [
[
{
"id": "test",
@@ -51,7 +72,7 @@
"test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "13": [
+ "15": [
[
{
"id": "test",
@@ -60,7 +81,7 @@
"test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "14": [
+ "16": [
[
{
"id": "test",
@@ -69,7 +90,7 @@
"test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "15": [
+ "17": [
[
{
"id": "test",
@@ -78,7 +99,7 @@
"test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "16": [
+ "18": [
[
{
"id": "test",
@@ -97,28 +118,24 @@
]
],
"3": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"4": [
[
- {
- "id": "test",
- "single_end": true
- },
- [
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
]
],
"5": [
[
- {
- "id": "test",
- "single_end": true
- },
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
]
],
"6": [
@@ -127,7 +144,11 @@
"id": "test",
"single_end": true
},
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ [
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"7": [
@@ -136,7 +157,7 @@
"id": "test",
"single_end": true
},
- "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"8": [
@@ -145,7 +166,7 @@
"id": "test",
"single_end": true
},
- "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"9": [
@@ -154,10 +175,7 @@
"id": "test",
"single_end": true
},
- [
- "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
+ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"bam": [
@@ -306,8 +324,26 @@
]
]
],
- "versions": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"wig": [
[
@@ -321,10 +357,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:28:39.242074494"
+ "timestamp": "2026-02-03T09:28:25.802437191"
},
"homo_sapiens - paired_end - arriba - stub": {
"content": [
@@ -348,6 +384,27 @@
]
],
"10": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "11": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ ]
+ ]
+ ],
+ "12": [
[
{
"id": "test",
@@ -360,7 +417,7 @@
]
]
],
- "11": [
+ "13": [
[
{
"id": "test",
@@ -369,7 +426,7 @@
"test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "12": [
+ "14": [
[
{
"id": "test",
@@ -378,7 +435,7 @@
"test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "13": [
+ "15": [
[
{
"id": "test",
@@ -387,7 +444,7 @@
"test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "14": [
+ "16": [
[
{
"id": "test",
@@ -396,7 +453,7 @@
"test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "15": [
+ "17": [
[
{
"id": "test",
@@ -405,7 +462,7 @@
"test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "16": [
+ "18": [
[
{
"id": "test",
@@ -424,28 +481,24 @@
]
],
"3": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"4": [
[
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
]
],
"5": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
]
],
"6": [
@@ -454,7 +507,11 @@
"id": "test",
"single_end": false
},
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ [
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"7": [
@@ -463,7 +520,7 @@
"id": "test",
"single_end": false
},
- "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"8": [
@@ -472,7 +529,7 @@
"id": "test",
"single_end": false
},
- "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"9": [
@@ -481,10 +538,7 @@
"id": "test",
"single_end": false
},
- [
- "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
+ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"bam": [
@@ -633,8 +687,26 @@
]
]
],
- "versions": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"wig": [
[
@@ -648,10 +720,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:29:08.392620556"
+ "timestamp": "2026-02-03T09:28:38.483306917"
},
"homo_sapiens - single_end": {
"content": [
@@ -702,15 +774,35 @@
[
],
- [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
- ]
+ {
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2024-12-11T16:21:34.549483887"
+ "timestamp": "2026-02-02T23:44:45.378997"
},
"homo_sapiens - paired_end": {
"content": [
@@ -761,15 +853,35 @@
[
],
- [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
- ]
+ {
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2024-12-11T16:22:17.011253146"
+ "timestamp": "2026-02-02T23:50:50.657212"
},
"homo_sapiens - paired_end - multiple - stub": {
"content": [
@@ -793,6 +905,27 @@
]
],
"10": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "11": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ ]
+ ]
+ ],
+ "12": [
[
{
"id": "test",
@@ -805,7 +938,7 @@
]
]
],
- "11": [
+ "13": [
[
{
"id": "test",
@@ -814,7 +947,7 @@
"test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "12": [
+ "14": [
[
{
"id": "test",
@@ -823,7 +956,7 @@
"test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "13": [
+ "15": [
[
{
"id": "test",
@@ -832,7 +965,7 @@
"test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "14": [
+ "16": [
[
{
"id": "test",
@@ -841,7 +974,7 @@
"test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "15": [
+ "17": [
[
{
"id": "test",
@@ -850,7 +983,7 @@
"test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "16": [
+ "18": [
[
{
"id": "test",
@@ -869,28 +1002,24 @@
]
],
"3": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"4": [
[
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
]
],
"5": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
]
],
"6": [
@@ -899,7 +1028,11 @@
"id": "test",
"single_end": false
},
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ [
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"7": [
@@ -908,7 +1041,7 @@
"id": "test",
"single_end": false
},
- "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"8": [
@@ -917,7 +1050,7 @@
"id": "test",
"single_end": false
},
- "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"9": [
@@ -926,10 +1059,7 @@
"id": "test",
"single_end": false
},
- [
- "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
+ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"bam": [
@@ -1078,8 +1208,26 @@
]
]
],
- "versions": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"wig": [
[
@@ -1093,10 +1241,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:29:31.072104862"
+ "timestamp": "2026-02-03T09:28:51.288466085"
},
"homo_sapiens - paired_end - multiple": {
"content": [
@@ -1147,15 +1295,35 @@
[
],
- [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
- ]
+ {
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:28:26.645008336"
+ "timestamp": "2026-02-03T09:28:19.516063466"
},
"homo_sapiens - paired_end - stub": {
"content": [
@@ -1179,6 +1347,27 @@
]
],
"10": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "11": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ ]
+ ]
+ ],
+ "12": [
[
{
"id": "test",
@@ -1191,7 +1380,7 @@
]
]
],
- "11": [
+ "13": [
[
{
"id": "test",
@@ -1200,7 +1389,7 @@
"test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "12": [
+ "14": [
[
{
"id": "test",
@@ -1209,7 +1398,7 @@
"test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "13": [
+ "15": [
[
{
"id": "test",
@@ -1218,7 +1407,7 @@
"test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "14": [
+ "16": [
[
{
"id": "test",
@@ -1227,7 +1416,7 @@
"test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "15": [
+ "17": [
[
{
"id": "test",
@@ -1236,7 +1425,7 @@
"test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "16": [
+ "18": [
[
{
"id": "test",
@@ -1255,28 +1444,24 @@
]
],
"3": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"4": [
[
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
]
],
"5": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
]
],
"6": [
@@ -1285,7 +1470,11 @@
"id": "test",
"single_end": false
},
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ [
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"7": [
@@ -1294,7 +1483,7 @@
"id": "test",
"single_end": false
},
- "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"8": [
@@ -1303,7 +1492,7 @@
"id": "test",
"single_end": false
},
- "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"9": [
@@ -1312,10 +1501,7 @@
"id": "test",
"single_end": false
},
- [
- "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
+ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"bam": [
@@ -1464,8 +1650,26 @@
]
]
],
- "versions": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"wig": [
[
@@ -1479,10 +1683,10 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:28:53.816280805"
+ "timestamp": "2026-02-03T09:28:32.099657738"
},
"homo_sapiens - paired_end - starfusion": {
"content": [
@@ -1524,15 +1728,35 @@
[
],
- [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
- ]
+ {
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:27:14.136111964"
+ "timestamp": "2026-02-03T09:26:46.244829386"
},
"homo_sapiens - paired_end - arriba": {
"content": [
@@ -1573,15 +1797,35 @@
[
],
- [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
- ]
+ {
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:24:00.829462526"
+ "timestamp": "2026-02-03T09:22:41.580434639"
},
"homo_sapiens - paired_end - starfusion - stub": {
"content": [
@@ -1605,6 +1849,27 @@
]
],
"10": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "11": [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
+ "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ ]
+ ]
+ ],
+ "12": [
[
{
"id": "test",
@@ -1617,7 +1882,7 @@
]
]
],
- "11": [
+ "13": [
[
{
"id": "test",
@@ -1626,7 +1891,7 @@
"test.SJ.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "12": [
+ "14": [
[
{
"id": "test",
@@ -1635,7 +1900,7 @@
"test.ReadsPerGene.out.tab:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "13": [
+ "15": [
[
{
"id": "test",
@@ -1644,7 +1909,7 @@
"test.Chimeric.out.junction:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "14": [
+ "16": [
[
{
"id": "test",
@@ -1653,7 +1918,7 @@
"test.out.sam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "15": [
+ "17": [
[
{
"id": "test",
@@ -1662,7 +1927,7 @@
"test.Signal.UniqueMultiple.str1.out.wig:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "16": [
+ "18": [
[
{
"id": "test",
@@ -1681,28 +1946,24 @@
]
],
"3": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"4": [
[
- {
- "id": "test",
- "single_end": false
- },
- [
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
- "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
]
],
"5": [
[
- {
- "id": "test",
- "single_end": false
- },
- "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
]
],
"6": [
@@ -1711,7 +1972,11 @@
"id": "test",
"single_end": false
},
- "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ [
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "testXd.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"7": [
@@ -1720,7 +1985,7 @@
"id": "test",
"single_end": false
},
- "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"8": [
@@ -1729,7 +1994,7 @@
"id": "test",
"single_end": false
},
- "test.Aligned.unsort.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "test.Aligned.sortedByCoord.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"9": [
@@ -1738,10 +2003,7 @@
"id": "test",
"single_end": false
},
- [
- "test.unmapped_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940",
- "test.unmapped_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
- ]
+ "test.toTranscriptome.out.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"bam": [
@@ -1890,8 +2152,26 @@
]
]
],
- "versions": [
- "versions.yml:md5,b416145d7b5b8a080e832a7f7cde4c44"
+ "versions_gawk": [
+ [
+ "STAR_ALIGN",
+ "gawk",
+ "5.1.0"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STAR_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ],
+ "versions_star": [
+ [
+ "STAR_ALIGN",
+ "star",
+ "2.7.11b"
+ ]
],
"wig": [
[
@@ -1905,9 +2185,9 @@
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-12-11T16:29:20.015372487"
+ "timestamp": "2026-02-03T09:28:44.836246776"
}
}
\ No newline at end of file
diff --git a/subworkflows/local/fastq_align_rna/main.nf b/subworkflows/local/fastq_align_rna/main.nf
index 1ca27833..5e86bff2 100644
--- a/subworkflows/local/fastq_align_rna/main.nf
+++ b/subworkflows/local/fastq_align_rna/main.nf
@@ -40,7 +40,6 @@ workflow FASTQ_ALIGN_RNA {
STAR_ALIGN.out.log_progress,
STAR_ALIGN.out.log_out,
)
- ch_versions = ch_versions.mix(STAR_ALIGN.out.versions.first())
// Concatenate splice junction files
def ch_splice_junctions_to_merge = group_junctions(STAR_ALIGN.out.spl_junc_tab)
From 1dfaee82bd16a7f7a79b1af032332295d75a6d70 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:51:52 +0100
Subject: [PATCH 158/228] bump samtools/sormadup module
---
modules.json | 2 +-
modules/nf-core/samtools/sormadup/main.nf | 13 +--
modules/nf-core/samtools/sormadup/meta.yml | 47 +++++++---
.../samtools/sormadup/tests/main.nf.test | 52 ++++++-----
.../samtools/sormadup/tests/main.nf.test.snap | 88 +++++++++++--------
5 files changed, 118 insertions(+), 84 deletions(-)
diff --git a/modules.json b/modules.json
index aa368218..8332985d 100644
--- a/modules.json
+++ b/modules.json
@@ -115,7 +115,7 @@
},
"samtools/sormadup": {
"branch": "master",
- "git_sha": "c8be52dba1166c678e74cda9c3a3c221635c8bb1",
+ "git_sha": "0043d7ccd6b7278cd566db278c2f6ceb937e04ba",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sormadup/samtools-sormadup.diff"
},
diff --git a/modules/nf-core/samtools/sormadup/main.nf b/modules/nf-core/samtools/sormadup/main.nf
index 86afb479..15bcf5ff 100644
--- a/modules/nf-core/samtools/sormadup/main.nf
+++ b/modules/nf-core/samtools/sormadup/main.nf
@@ -8,7 +8,7 @@ process SAMTOOLS_SORMADUP {
'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(fasta)
+ tuple val(meta), path(input), path(fasta), path(fai)
output:
tuple val(meta), path("*.bam") , emit: bam, optional: true
@@ -16,7 +16,7 @@ process SAMTOOLS_SORMADUP {
tuple val(meta), path("*.csi") , emit: csi, optional: true
tuple val(meta), path("*.crai") , emit: crai, optional: true
tuple val(meta), path("*.metrics") , emit: metrics
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools
when:
task.ext.when == null || task.ext.when
@@ -71,10 +71,6 @@ process SAMTOOLS_SORMADUP {
- \\
${prefix}.${extension}
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
@@ -87,10 +83,5 @@ process SAMTOOLS_SORMADUP {
"""
touch ${prefix}.${extension}
touch ${prefix}.metrics
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/samtools/sormadup/meta.yml b/modules/nf-core/samtools/sormadup/meta.yml
index bb6295bf..02b9ad4e 100644
--- a/modules/nf-core/samtools/sormadup/meta.yml
+++ b/modules/nf-core/samtools/sormadup/meta.yml
@@ -1,4 +1,3 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: "samtools_sormadup"
description: Collate/Fixmate/Sort/Markdup SAM/BAM/CRAM file
keywords:
@@ -20,7 +19,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
args_id: "$args"
identifier: biotools:samtools
- samtools_collate:
@@ -31,7 +31,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
args_id: "$args2"
identifier: biotools:samtools
- samtools_fixmate:
@@ -42,7 +43,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
args_id: "$args3"
identifier: biotools:samtools
- samtools_sort:
@@ -53,7 +55,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
args_id: "$args4"
identifier: biotools:samtools
- samtools_markdup:
@@ -64,7 +67,8 @@ tools:
homepage: http://www.htslib.org/
documentation: http://www.htslib.org/doc/samtools.html
doi: 10.1093/bioinformatics/btp352
- licence: ["MIT"]
+ licence:
+ - "MIT"
args_id: "$args5"
identifier: biotools:samtools
input:
@@ -88,6 +92,11 @@ input:
description: Reference genome file
pattern: "*.{fasta,fa,fna}"
ontologies: []
+ - fai:
+ type: file
+ description: Reference genome index file
+ pattern: "*.fai"
+ ontologies: []
output:
bam:
- - meta:
@@ -144,13 +153,27 @@ output:
description: Duplicate metrics file
pattern: "*.metrics"
ontologies: []
+ versions_samtools:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - samtools:
+ type: string
+ description: The tool name
+ - "samtools version | sed '1!d;s/.* //'":
+ type: eval
+ description: The command used to generate the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - samtools:
+ type: string
+ description: The tool name
+ - "samtools version | sed '1!d;s/.* //'":
+ type: eval
+ description: The command used to generate the version of the tool
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/samtools/sormadup/tests/main.nf.test b/modules/nf-core/samtools/sormadup/tests/main.nf.test
index 574d70c6..f9bc34e5 100644
--- a/modules/nf-core/samtools/sormadup/tests/main.nf.test
+++ b/modules/nf-core/samtools/sormadup/tests/main.nf.test
@@ -13,22 +13,23 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ]
"""
}
}
then {
+ assert process.success
assertAll(
- { assert process.success },
{ assert snapshot(process.out).match() }
)
}
@@ -42,23 +43,24 @@ nextflow_process {
}
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ]
"""
}
}
then {
+ assert process.success
def fasta = params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta'
assertAll(
- { assert process.success },
{
assert snapshot(
cram(
@@ -67,6 +69,7 @@ nextflow_process {
).getReadsMD5(),
file(process.out.crai[0][1]).name,
process.out.metrics,
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
}
)
@@ -81,22 +84,23 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
+ ]
"""
}
}
then {
+ assert process.success
assertAll(
- { assert process.success },
{ assert snapshot(process.out).match() }
)
}
diff --git a/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap b/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap
index 7d36514f..9d04d5d2 100644
--- a/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/sormadup/tests/main.nf.test.snap
@@ -5,8 +5,7 @@
"0": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
@@ -23,20 +22,22 @@
"4": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.metrics:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
"5": [
- "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
+ [
+ "SAMTOOLS_SORMADUP",
+ "samtools",
+ "1.22.1"
+ ]
],
"bam": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
@@ -53,22 +54,25 @@
"metrics": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.metrics:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORMADUP",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-10T14:41:27.357324"
+ "timestamp": "2026-02-03T14:50:54.695296905"
},
"sarscov2 - cram": {
"content": [
@@ -77,18 +81,26 @@
[
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.merged.metrics:md5,02eebd31b097e165e1b18d84b023f18d"
]
- ]
+ ],
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORMADUP",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-10T15:34:19.685282"
+ "timestamp": "2026-02-04T09:59:00.393494"
},
"sarscov2 - bam": {
"content": [
@@ -96,10 +108,9 @@
"0": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
- "test.bam:md5,22ccf80de9847da1fa532f7774580554"
+ "test.bam:md5,b191a8b4d5b8b9884def3a613fee914a"
]
],
"1": [
@@ -114,22 +125,24 @@
"4": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.metrics:md5,6093d8853805578a1868f22ff68177e7"
]
],
"5": [
- "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
+ [
+ "SAMTOOLS_SORMADUP",
+ "samtools",
+ "1.22.1"
+ ]
],
"bam": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
- "test.bam:md5,22ccf80de9847da1fa532f7774580554"
+ "test.bam:md5,b191a8b4d5b8b9884def3a613fee914a"
]
],
"crai": [
@@ -144,21 +157,24 @@
"metrics": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.metrics:md5,6093d8853805578a1868f22ff68177e7"
]
],
- "versions": [
- "versions.yml:md5,f747eda74610b9e2ffbe38a0fe32605c"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_SORMADUP",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-10T14:41:11.744386"
+ "timestamp": "2026-02-04T10:01:06.229966"
}
}
\ No newline at end of file
From 1391207e61914361193d22b9653e45ae14b650ee Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:53:23 +0100
Subject: [PATCH 159/228] bump bcl2fastq/bclconvert modules
---
modules.json | 4 ++--
modules/nf-core/bcl2fastq/main.nf | 2 +-
modules/nf-core/bclconvert/main.nf | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/modules.json b/modules.json
index 8332985d..b2c74466 100644
--- a/modules.json
+++ b/modules.json
@@ -7,12 +7,12 @@
"nf-core": {
"bcl2fastq": {
"branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
"installed_by": ["bcl_demultiplex"]
},
"bclconvert": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
"installed_by": ["bcl_demultiplex", "modules"],
"patch": "modules/nf-core/bclconvert/bclconvert.diff"
},
diff --git a/modules/nf-core/bcl2fastq/main.nf b/modules/nf-core/bcl2fastq/main.nf
index 2759a364..865f7951 100644
--- a/modules/nf-core/bcl2fastq/main.nf
+++ b/modules/nf-core/bcl2fastq/main.nf
@@ -1,5 +1,5 @@
process BCL2FASTQ {
- tag {"$meta.lane" ? "$meta.id"+"."+"$meta.lane" : "$meta.id" }
+ tag { "$meta.lane" ? "$meta.id"+"."+"$meta.lane" : "$meta.id" }
label 'process_high'
container "nf-core/bcl2fastq:2.20.0.422"
diff --git a/modules/nf-core/bclconvert/main.nf b/modules/nf-core/bclconvert/main.nf
index b61f2240..db0dac03 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 69ad5d3365f63e7951f454f382b9a52167923dd8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:55:31 +0100
Subject: [PATCH 160/228] bump biobambam/bamsormadup module
---
modules.json | 2 +-
.../bamsormadup/biobambam-bamsormadup.diff | 24 +-------
.../biobambam/bamsormadup/environment.yml | 2 +-
modules/nf-core/biobambam/bamsormadup/main.nf | 6 +-
.../biobambam/bamsormadup/tests/main.nf.test | 55 ++++++++++---------
.../bamsormadup/tests/main.nf.test.snap | 49 ++++++++++++-----
6 files changed, 72 insertions(+), 66 deletions(-)
diff --git a/modules.json b/modules.json
index b2c74466..7a31dc10 100644
--- a/modules.json
+++ b/modules.json
@@ -18,7 +18,7 @@
},
"biobambam/bamsormadup": {
"branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
"installed_by": ["modules"],
"patch": "modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff"
},
diff --git a/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff b/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff
index 9c5a8c3e..ba8b093d 100644
--- a/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff
+++ b/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff
@@ -4,34 +4,16 @@ Changes in component 'nf-core/biobambam/bamsormadup'
Changes in 'biobambam/bamsormadup/main.nf':
--- modules/nf-core/biobambam/bamsormadup/main.nf
+++ modules/nf-core/biobambam/bamsormadup/main.nf
-@@ -6,8 +6,7 @@
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/biobambam:2.0.183--h9f5acd7_1' : 'biocontainers/biobambam:2.0.183--h9f5acd7_1'}"
+@@ -8,8 +8,7 @@
+ 'biocontainers/biobambam:2.0.185--h85de650_1'}"
input:
- tuple val(meta) , path(bams, stageAs: "?/*")
- tuple val(meta2), path(fasta)
-+ tuple val(meta) , path(bams, stageAs: "?/*"), path(fasta)
++ tuple val(meta) , path(bams, stageAs: "?/*"), path(fasta), path(fai)
output:
tuple val(meta), path("*.bam") ,optional:true, emit: bam
-@@ -25,7 +24,7 @@
- def prefix = task.ext.prefix ?: "${meta.id}"
- def suffix = args.contains("outputformat=cram") ? "cram" : "bam"
- def input_string = bams instanceof List ? bams.join(" I=") : bams
-- if (args.contains("outputformat=cram") && reference == null) error "Reference required for CRAM output."
-+ if (args.contains("outputformat=cram") && fasta == null) error "Reference required for CRAM output."
-
- """
- bamcat \\
-@@ -53,7 +52,7 @@
- def args = task.ext.args ?: ''
- def prefix = task.ext.prefix ?: "${meta.id}"
- def suffix = args.contains("outputformat=cram") ? "cram" : "bam"
-- if (args.contains("outputformat=cram") && reference == null) error "Reference required for CRAM output."
-+ if (args.contains("outputformat=cram") && fasta == null) error "Reference required for CRAM output."
-
- """
- touch ${prefix}.${suffix}
'modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap' is unchanged
'modules/nf-core/biobambam/bamsormadup/tests/main.nf.test' is unchanged
diff --git a/modules/nf-core/biobambam/bamsormadup/environment.yml b/modules/nf-core/biobambam/bamsormadup/environment.yml
index 8c8c3166..948d0ad9 100644
--- a/modules/nf-core/biobambam/bamsormadup/environment.yml
+++ b/modules/nf-core/biobambam/bamsormadup/environment.yml
@@ -4,4 +4,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::biobambam=2.0.183
+ - bioconda::biobambam=2.0.185=h85de650_1
diff --git a/modules/nf-core/biobambam/bamsormadup/main.nf b/modules/nf-core/biobambam/bamsormadup/main.nf
index bb6edc3e..032e718d 100644
--- a/modules/nf-core/biobambam/bamsormadup/main.nf
+++ b/modules/nf-core/biobambam/bamsormadup/main.nf
@@ -3,10 +3,12 @@ process BIOBAMBAM_BAMSORMADUP {
label "process_medium"
conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/biobambam:2.0.183--h9f5acd7_1' : 'biocontainers/biobambam:2.0.183--h9f5acd7_1'}"
+ container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+ 'https://depot.galaxyproject.org/singularity/biobambam:2.0.185--h85de650_1' :
+ 'biocontainers/biobambam:2.0.185--h85de650_1'}"
input:
- tuple val(meta) , path(bams, stageAs: "?/*"), path(fasta)
+ tuple val(meta) , path(bams, stageAs: "?/*"), path(fasta), path(fai)
output:
tuple val(meta), path("*.bam") ,optional:true, emit: bam
diff --git a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test
index 43272ff1..0c4c8498 100644
--- a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test
+++ b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test
@@ -16,13 +16,13 @@ nextflow_process {
process {
"""
input[0] = [
- [ id:'test', single_end:false ], // meta map
- [
+ [ id:'test', single_end:false ], // meta map
+ [
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
]
- ]
- input[1] = [[:],[]]
+ ]
+ input[1] = [[:],[]]
"""
}
@@ -32,13 +32,12 @@ nextflow_process {
assertAll(
{ assert process.success },
{ assert snapshot(
- bam(process.out.bam[0][1]).getReadsMD5(),
- process.out.bam_index,
- process.out.cram,
- file(process.out.metrics[0][1]).readLines()[3..5],
- process.out.versions
- ).match()
- }
+ bam(process.out.bam[0][1]).getReadsMD5(),
+ process.out.bam_index,
+ process.out.cram,
+ file(process.out.metrics[0][1]).readLines()[3..5],
+ process.out.versions.collect{ path(it).yaml }
+ ).match()}
)
}
}
@@ -49,12 +48,12 @@ nextflow_process {
process {
"""
input[0] = [
- [ id:'test', single_end:false ], // meta map
- [
+ [ id:'test', single_end:false ], // meta map
+ [
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
]
- ]
- input[1] = [[:],[]]
+ ]
+ input[1] = [[:],[]]
"""
}
@@ -64,13 +63,12 @@ nextflow_process {
assertAll(
{ assert process.success },
{ assert snapshot(
- bam(process.out.bam[0][1]).getReadsMD5(),
- process.out.bam_index,
- process.out.cram,
- file(process.out.metrics[0][1]).readLines()[3..5],
- process.out.versions
- ).match()
- }
+ bam(process.out.bam[0][1]).getReadsMD5(),
+ process.out.bam_index,
+ process.out.cram,
+ file(process.out.metrics[0][1]).readLines()[3..5],
+ process.out.versions.collect{ path(it).yaml }
+ ).match()}
)
}
}
@@ -83,12 +81,12 @@ nextflow_process {
process {
"""
input[0] = [
- [ id:'test', single_end:false ], // meta map
- [
+ [ id:'test', single_end:false ], // meta map
+ [
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
]
- ]
- input[1] = [[:],[]]
+ ]
+ input[1] = [[:],[]]
"""
}
@@ -97,7 +95,10 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(
+ process.out,
+ process.out.versions.collect{ path(it).yaml }
+ ).match() }
)
}
}
diff --git a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap
index f7a41ca6..b820e405 100644
--- a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap
+++ b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap
@@ -14,14 +14,20 @@
""
],
[
- "versions.yml:md5,67ab301f20567acd9d0e648c2a3e158c"
+ {
+ "BIOBAMBAM_BAMSORMADUP": {
+ "bamcat": "2.0.185",
+ "bamcollate2": "2.0.185",
+ "bamsormadup": "2.0.185"
+ }
+ }
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-09-05T22:00:39.772883"
+ "timestamp": "2026-02-06T12:52:41.351378528"
},
"test-biobambam-bamsormadup-multi-input": {
"content": [
@@ -38,14 +44,20 @@
"testN\t0\t2820\t2\t0\t828\t0\t0.293617\t3807"
],
[
- "versions.yml:md5,67ab301f20567acd9d0e648c2a3e158c"
+ {
+ "BIOBAMBAM_BAMSORMADUP": {
+ "bamcat": "2.0.185",
+ "bamcollate2": "2.0.185",
+ "bamsormadup": "2.0.185"
+ }
+ }
]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-09-05T22:00:31.187999"
+ "timestamp": "2026-02-06T12:52:29.639539709"
},
"test-biobambam-bamsormadup-single-input-stub": {
"content": [
@@ -75,7 +87,7 @@
]
],
"4": [
- "versions.yml:md5,67ab301f20567acd9d0e648c2a3e158c"
+ "versions.yml:md5,a3e9cdb2ef49dc4722663257b23c5cb6"
],
"bam": [
[
@@ -102,14 +114,23 @@
]
],
"versions": [
- "versions.yml:md5,67ab301f20567acd9d0e648c2a3e158c"
+ "versions.yml:md5,a3e9cdb2ef49dc4722663257b23c5cb6"
]
- }
+ },
+ [
+ {
+ "BIOBAMBAM_BAMSORMADUP": {
+ "bamcat": "2.0.185",
+ "bamcollate2": "2.0.185",
+ "bamsormadup": "2.0.185"
+ }
+ }
+ ]
],
"meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-09-05T21:57:13.430982"
+ "timestamp": "2026-02-06T13:56:01.80534017"
}
}
\ No newline at end of file
From fe6f856ba61d1ee615ec87f77ff845f2d3330971 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:59:13 +0100
Subject: [PATCH 161/228] bump aligner module
---
modules.json | 11 +-
modules/nf-core/bowtie2/align/main.nf | 18 +-
modules/nf-core/bowtie2/align/meta.yml | 66 ++-
.../nf-core/bowtie2/align/tests/main.nf.test | 24 +-
.../bowtie2/align/tests/main.nf.test.snap | 384 ++++++++++++++----
modules/nf-core/bwa/mem/tests/main.nf.test | 5 -
.../nf-core/bwa/mem/tests/main.nf.test.snap | 35 +-
modules/nf-core/bwamem2/mem/main.nf | 14 +-
modules/nf-core/bwamem2/mem/meta.yml | 45 +-
.../nf-core/bwamem2/mem/tests/main.nf.test | 8 +-
.../bwamem2/mem/tests/main.nf.test.snap | 92 +++--
.../fastq_align_dna/fastq_align_dna.diff | 37 +-
subworkflows/nf-core/fastq_align_dna/main.nf | 16 +-
.../fastq_align_dna/tests/main.nf.test.snap | 32 +-
14 files changed, 537 insertions(+), 250 deletions(-)
diff --git a/modules.json b/modules.json
index 7a31dc10..5413652a 100644
--- a/modules.json
+++ b/modules.json
@@ -24,19 +24,19 @@
},
"bowtie2/align": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "ab146e7909edbf6dcc6459de57eef29dceb61d42",
"installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/bowtie2/align/bowtie2-align.diff"
},
"bwa/mem": {
"branch": "master",
- "git_sha": "1c46359c837ef768b004519f535c30378e8289fc",
+ "git_sha": "966ba9887e2b04d89d64db06c01508873bde13b1",
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwa/mem/bwa-mem.diff"
},
"bwamem2/mem": {
"branch": "master",
- "git_sha": "d86336f3e7ae0d5f76c67b0859409769cfeb2af2",
+ "git_sha": "5dd46a36fca68d6ad1a6b22ec47adc8c6863717d",
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwamem2/mem/bwamem2-mem.diff"
},
@@ -160,8 +160,9 @@
},
"fastq_align_dna": {
"branch": "master",
- "git_sha": "070ddae7fb59384d3d85bf69eb9a1d71ab33ada9",
- "installed_by": ["subworkflows"]
+ "git_sha": "5dd46a36fca68d6ad1a6b22ec47adc8c6863717d",
+ "installed_by": ["subworkflows"],
+ "patch": "subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff"
},
"utils_nextflow_pipeline": {
"branch": "master",
diff --git a/modules/nf-core/bowtie2/align/main.nf b/modules/nf-core/bowtie2/align/main.nf
index 4f153522..86aa8bef 100644
--- a/modules/nf-core/bowtie2/align/main.nf
+++ b/modules/nf-core/bowtie2/align/main.nf
@@ -20,7 +20,9 @@ process BOWTIE2_ALIGN {
tuple val(meta), path("*.crai") , emit: crai , optional:true
tuple val(meta), path("*.log") , emit: log
tuple val(meta), path("*fastq.gz") , emit: fastq , optional:true
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('bowtie2'), eval("bowtie2 --version 2>&1 | sed -n '1s/.*bowtie2-align-s version //p'"), emit: versions_bowtie2, topic: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions
+ tuple val("${task.process}"), val('pigz'), eval("pigz --version 2>&1 | sed 's/pigz //'"), emit: versions_pigz, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -68,13 +70,6 @@ process BOWTIE2_ALIGN {
if [ -f ${prefix}.unmapped.fastq.2.gz ]; then
mv ${prefix}.unmapped.fastq.2.gz ${prefix}.unmapped_2.fastq.gz
fi
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bowtie2: \$(echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//')
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
"""
stub:
@@ -102,13 +97,6 @@ process BOWTIE2_ALIGN {
${create_index}
touch ${prefix}.bowtie2.log
${create_unmapped}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bowtie2: \$(echo \$(bowtie2 --version 2>&1) | sed 's/^.*bowtie2-align-s version //; s/ .*\$//')
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/bowtie2/align/meta.yml b/modules/nf-core/bowtie2/align/meta.yml
index 0c12b28a..2d8051da 100644
--- a/modules/nf-core/bowtie2/align/meta.yml
+++ b/modules/nf-core/bowtie2/align/meta.yml
@@ -123,13 +123,67 @@ output:
pattern: "*.fastq.gz"
ontologies:
- edam: http://edamontology.org/format_3989 # GZIP format
+ versions_bowtie2:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bowtie2:
+ type: string
+ description: The name of the tool
+ - "bowtie2 --version 2>&1 | sed -n '1s/.*bowtie2-align-s version //p'":
+ type: eval
+ description: The expression to obtain the version of bowtie2
+ 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 samtools
+ versions_pigz:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - "pigz --version 2>&1 | sed 's/pigz //'":
+ type: eval
+ description: The expression to obtain the version of pigz
+
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bowtie2:
+ type: string
+ description: The name of the tool
+ - "bowtie2 --version 2>&1 | sed -n '1s/.*bowtie2-align-s version //p'":
+ type: eval
+ description: The expression to obtain the version of bowtie2
+ - - ${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 samtools
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - "pigz --version 2>&1 | sed 's/pigz //'":
+ type: eval
+ description: The expression to obtain the version of pigz
+
authors:
- "@joseespinosa"
- "@drpatelh"
diff --git a/modules/nf-core/bowtie2/align/tests/main.nf.test b/modules/nf-core/bowtie2/align/tests/main.nf.test
index 0de5950f..1705b66d 100644
--- a/modules/nf-core/bowtie2/align/tests/main.nf.test
+++ b/modules/nf-core/bowtie2/align/tests/main.nf.test
@@ -47,7 +47,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -93,7 +93,7 @@ nextflow_process {
file(process.out.sam[0][1]).readLines()[0..4],
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -139,7 +139,7 @@ nextflow_process {
file(process.out.sam[0][1]).readLines()[0..4],
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -184,7 +184,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -232,7 +232,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -280,7 +280,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -326,7 +326,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -375,7 +375,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -423,7 +423,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -468,7 +468,7 @@ nextflow_process {
file(process.out.bam[0][1]).name,
process.out.log,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
@@ -566,7 +566,7 @@ nextflow_process {
file(process.out.csi[0][1]).name,
file(process.out.log[0][1]).name,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
@@ -613,7 +613,7 @@ nextflow_process {
file(process.out.csi[0][1]).name,
file(process.out.log[0][1]).name,
process.out.fastq,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith('versions') }
).match() }
)
}
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 4ffd62e9..c8c6d4b5 100644
--- a/modules/nf-core/bowtie2/align/tests/main.nf.test.snap
+++ b/modules/nf-core/bowtie2/align/tests/main.nf.test.snap
@@ -14,15 +14,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T12:45:59.038637"
+ "timestamp": "2026-02-03T15:18:12.706444258"
},
"sarscov2 - fastq, index, fasta, false, false - sam2": {
"content": [
@@ -45,15 +65,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-25T08:28:51.065380563"
+ "timestamp": "2026-02-03T15:17:39.204319466"
},
"sarscov2 - [fastq1, fastq2], index, fasta, true, true - cram": {
"content": [
@@ -81,15 +121,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-03-24T11:38:12.222762"
+ "timestamp": "2026-02-03T10:46:53.843035"
},
"sarscov2 - fastq, index, fasta, true, false - bam": {
"content": [
@@ -106,15 +166,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T12:46:12.766061"
+ "timestamp": "2026-02-03T15:18:25.788314396"
},
"sarscov2 - fastq, large_index, fasta, false, false - bam": {
"content": [
@@ -131,15 +211,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T11:24:03.499074"
+ "timestamp": "2026-02-03T15:18:06.123712951"
},
"sarscov2 - fastq, index, fasta, false, true - bam": {
"content": [
@@ -156,15 +256,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T11:08:30.329879"
+ "timestamp": "2026-02-03T15:17:45.85694104"
},
"sarscov2 - fastq, index, fasta, true, false - stub": {
"content": [
@@ -174,15 +294,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T13:48:54.684859"
+ "timestamp": "2026-02-03T15:18:45.009237771"
},
"sarscov2 - [fastq1, fastq2], index, fasta, false, false - bam": {
"content": [
@@ -199,15 +339,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T11:13:41.815354"
+ "timestamp": "2026-02-03T15:17:52.571603438"
},
"sarscov2 - [fastq1, fastq2], index, fasta, false, false - stub": {
"content": [
@@ -217,15 +377,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T13:06:00.821232"
+ "timestamp": "2026-02-03T15:18:38.851739544"
},
"sarscov2 - fastq, index, fasta, false, false - sam": {
"content": [
@@ -248,15 +428,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-25T08:28:26.086145568"
+ "timestamp": "2026-02-03T15:17:32.669170305"
},
"sarscov2 - [fastq1, fastq2], index, fasta, true, false - bam": {
"content": [
@@ -273,15 +473,35 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T12:46:05.840695"
+ "timestamp": "2026-02-03T15:18:19.168328408"
},
"sarscov2 - [fastq1, fastq2], index, fasta, false, true - bam": {
"content": [
@@ -298,14 +518,34 @@
[
],
- [
- "versions.yml:md5,2768d626cdb54c9a9b5ed7aecbc3ca11"
- ]
+ {
+ "versions_bowtie2": [
+ [
+ "BOWTIE2_ALIGN",
+ "bowtie2",
+ "2.5.4"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "BOWTIE2_ALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BOWTIE2_ALIGN",
+ "samtools",
+ "1.21"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T11:18:52.825034"
+ "timestamp": "2026-02-03T15:17:59.201650301"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test
index 5de2c2f4..d7b69b9e 100644
--- a/modules/nf-core/bwa/mem/tests/main.nf.test
+++ b/modules/nf-core/bwa/mem/tests/main.nf.test
@@ -49,7 +49,6 @@ nextflow_process {
process.out.csi,
process.out.crai,
process.out.versions,
- bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -84,7 +83,6 @@ nextflow_process {
process.out.csi,
process.out.crai,
process.out.versions,
- bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -120,7 +118,6 @@ nextflow_process {
process.out.csi,
process.out.crai,
process.out.versions,
- bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -156,7 +153,6 @@ nextflow_process {
process.out.csi,
process.out.crai,
process.out.versions,
- bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -192,7 +188,6 @@ nextflow_process {
process.out.csi,
process.out.crai,
process.out.versions,
- bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap
index 51496a3c..70b7b89b 100644
--- a/modules/nf-core/bwa/mem/tests/main.nf.test.snap
+++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap
@@ -13,14 +13,13 @@
[
"versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
],
- "37b4ee1649480bd1ff98666447f64fa5",
"798439cbd7fd81cbcc5078022dc5479d"
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-23T11:05:11.396076472"
+ "timestamp": "2026-01-26T15:16:52.718077761"
},
"Single-End Sort": {
"content": [
@@ -36,14 +35,13 @@
[
"versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
],
- "57106634fcaf3bf503d5487a7717c5d3",
"94fcf617f5b994584c4e8d4044e16b4f"
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-23T11:05:19.529514701"
+ "timestamp": "2026-01-26T15:17:00.554958251"
},
"Paired-End": {
"content": [
@@ -59,14 +57,13 @@
[
"versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
],
- "57770ff7c7186ed40c42f3d71c16ce3c",
"57aeef88ed701a8ebc8e2f0a381b2a6"
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-23T11:05:27.433790935"
+ "timestamp": "2026-01-26T15:17:08.162122031"
},
"Paired-End Sort": {
"content": [
@@ -82,14 +79,13 @@
[
"versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
],
- "8f5d8f83b485dcfa1f47a73ae645e3a7",
"af8628d9df18b2d3d4f6fd47ef2bb872"
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-23T11:05:35.775774487"
+ "timestamp": "2026-01-26T15:17:15.713464923"
},
"Single-end - stub": {
"content": [
@@ -182,14 +178,13 @@
[
"versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
],
- "57770ff7c7186ed40c42f3d71c16ce3c",
"57aeef88ed701a8ebc8e2f0a381b2a6"
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-23T11:05:43.764589371"
+ "timestamp": "2026-01-26T15:17:23.395002931"
},
"Paired-end - stub": {
"content": [
diff --git a/modules/nf-core/bwamem2/mem/main.nf b/modules/nf-core/bwamem2/mem/main.nf
index 830c1710..5ac348f2 100644
--- a/modules/nf-core/bwamem2/mem/main.nf
+++ b/modules/nf-core/bwamem2/mem/main.nf
@@ -17,7 +17,7 @@ process BWAMEM2_MEM {
tuple val(meta), path("*.cram") , emit: cram, optional:true
tuple val(meta), path("*.crai") , emit: crai, optional:true
tuple val(meta), path("*.csi") , emit: csi , optional:true
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('bwamem2'), eval('bwa-mem2 version | grep -o -E "[0-9]+(\\.[0-9]+)+"'), emit: versions_bwamem2, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -44,12 +44,6 @@ process BWAMEM2_MEM {
\$INDEX \\
$reads \\
| samtools $samtools_command $args2 -@ $task.cpus ${reference} -o ${prefix}.${extension} -
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //')
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
@@ -71,11 +65,5 @@ process BWAMEM2_MEM {
"""
touch ${prefix}.${extension}
${create_index}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bwamem2: \$(echo \$(bwa-mem2 version 2>&1) | sed 's/.* //')
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/bwamem2/mem/meta.yml b/modules/nf-core/bwamem2/mem/meta.yml
index 6c7d1728..bcfd006d 100644
--- a/modules/nf-core/bwamem2/mem/meta.yml
+++ b/modules/nf-core/bwamem2/mem/meta.yml
@@ -16,7 +16,8 @@ tools:
homepage: https://github.com/bwa-mem2/bwa-mem2
documentation: http://www.htslib.org/doc/samtools.html
arxiv: arXiv:1303.3997
- licence: ["MIT"]
+ licence:
+ - "MIT"
identifier: "biotools:bwa-mem2"
input:
- - meta:
@@ -30,8 +31,8 @@ input:
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
ontologies:
- - edam: "http://edamontology.org/data_2044" # Sequence
- - edam: "http://edamontology.org/format_1930" # FASTQ
+ - edam: "http://edamontology.org/data_2044"
+ - edam: "http://edamontology.org/format_1930"
- - meta2:
type: map
description: |
@@ -42,7 +43,7 @@ input:
description: BWA genome index files
pattern: "Directory containing BWA index *.{0132,amb,ann,bwt.2bit.64,pac}"
ontologies:
- - edam: "http://edamontology.org/data_3210" # Genome index
+ - edam: "http://edamontology.org/data_3210"
- - meta3:
type: map
description: |
@@ -53,8 +54,8 @@ input:
description: Reference genome in FASTA format
pattern: "*.{fa,fasta,fna}"
ontologies:
- - edam: "http://edamontology.org/data_2044" # Sequence
- - edam: "http://edamontology.org/format_1929" # FASTA
+ - edam: "http://edamontology.org/data_2044"
+ - edam: "http://edamontology.org/format_1929"
- sort_bam:
type: boolean
description: use samtools sort (true) or samtools view (false)
@@ -71,7 +72,7 @@ output:
description: Output SAM file containing read alignments
pattern: "*.{sam}"
ontologies:
- - edam: "http://edamontology.org/format_2573" # SAM
+ - edam: "http://edamontology.org/format_2573"
bam:
- - meta:
type: map
@@ -83,7 +84,7 @@ output:
description: Output BAM file containing read alignments
pattern: "*.{bam}"
ontologies:
- - edam: "http://edamontology.org/format_2572" # BAM
+ - edam: "http://edamontology.org/format_2572"
cram:
- - meta:
type: map
@@ -95,7 +96,7 @@ output:
description: Output CRAM file containing read alignments
pattern: "*.{cram}"
ontologies:
- - edam: "http://edamontology.org/format_3462" # CRAM
+ - edam: "http://edamontology.org/format_3462"
crai:
- - meta:
type: map
@@ -118,13 +119,27 @@ output:
description: Index file for BAM file
pattern: "*.{csi}"
ontologies: []
+ versions_bwamem2:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bwamem2:
+ type: string
+ description: The name of the tool
+ - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+":
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bwamem2:
+ type: string
+ description: The name of the tool
+ - bwa-mem2 version | grep -o -E "[0-9]+(\.[0-9]+)+":
+ 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 9e0ab14a..20e37254 100644
--- a/modules/nf-core/bwamem2/mem/tests/main.nf.test
+++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test
@@ -46,7 +46,7 @@ nextflow_process {
{ assert snapshot(
bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions")}
).match() }
)
}
@@ -75,7 +75,7 @@ nextflow_process {
{ assert snapshot(
bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions")}
).match() }
)
}
@@ -107,7 +107,7 @@ nextflow_process {
{ assert snapshot(
bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions")}
).match() }
)
}
@@ -139,7 +139,7 @@ nextflow_process {
{ assert snapshot(
bam(process.out.bam[0][1]).getHeaderMD5(),
bam(process.out.bam[0][1]).getReadsMD5(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions")}
).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 b7d40a68..74763935 100644
--- a/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap
+++ b/modules/nf-core/bwamem2/mem/tests/main.nf.test.snap
@@ -3,15 +3,21 @@
"content": [
"e414c2d48e2e44c2c52c20ecd88e8bd8",
"57aeef88ed701a8ebc8e2f0a381b2a6",
- [
- "versions.yml:md5,3574188ab1f33fd99cff9f5562dfb885"
- ]
+ {
+ "versions_bwamem2": [
+ [
+ "BWAMEM2_MEM",
+ "bwamem2",
+ "2.2.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:44:52.73673293"
+ "timestamp": "2026-02-09T16:25:00.500092"
},
"sarscov2 - [fastq1, fastq2], index, fasta, true - stub": {
"content": [
@@ -44,7 +50,11 @@
]
],
"5": [
- "versions.yml:md5,3574188ab1f33fd99cff9f5562dfb885"
+ [
+ "BWAMEM2_MEM",
+ "bwamem2",
+ "2.2.1"
+ ]
],
"bam": [
[
@@ -73,57 +83,79 @@
"sam": [
],
- "versions": [
- "versions.yml:md5,3574188ab1f33fd99cff9f5562dfb885"
+ "versions_bwamem2": [
+ [
+ "BWAMEM2_MEM",
+ "bwamem2",
+ "2.2.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:45:14.834888709"
+ "timestamp": "2026-02-09T16:25:22.004027"
},
"sarscov2 - [fastq1, fastq2], index, fasta, true": {
"content": [
"716ed1ef39deaad346ca7cf86e08f959",
"af8628d9df18b2d3d4f6fd47ef2bb872",
- [
- "versions.yml:md5,3574188ab1f33fd99cff9f5562dfb885"
- ]
+ {
+ "versions_bwamem2": [
+ [
+ "BWAMEM2_MEM",
+ "bwamem2",
+ "2.2.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:45:04.750057645"
+ "timestamp": "2026-02-09T16:25:14.131056"
},
"sarscov2 - fastq, index, fasta, false": {
"content": [
"283a83f604f3f5338acedfee349dccf4",
"798439cbd7fd81cbcc5078022dc5479d",
- [
- "versions.yml:md5,3574188ab1f33fd99cff9f5562dfb885"
- ]
+ {
+ "versions_bwamem2": [
+ [
+ "BWAMEM2_MEM",
+ "bwamem2",
+ "2.2.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:44:28.57550711"
+ "timestamp": "2026-02-09T16:24:34.624533"
},
"sarscov2 - fastq, index, fasta, true": {
"content": [
"ed99048bb552cac58e39923b550b6d5b",
"94fcf617f5b994584c4e8d4044e16b4f",
- [
- "versions.yml:md5,3574188ab1f33fd99cff9f5562dfb885"
- ]
+ {
+ "versions_bwamem2": [
+ [
+ "BWAMEM2_MEM",
+ "bwamem2",
+ "2.2.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:44:40.437183765"
+ "timestamp": "2026-02-09T16:24:47.191245"
}
}
\ No newline at end of file
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 3b39944b..dbe123ad 100644
--- a/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
+++ b/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
@@ -3,24 +3,7 @@ Changes in component 'nf-core/fastq_align_dna'
Changes in 'fastq_align_dna/main.nf':
--- subworkflows/nf-core/fastq_align_dna/main.nf
+++ subworkflows/nf-core/fastq_align_dna/main.nf
-@@ -5,68 +5,77 @@
- //
-
-
--include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
--include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
--include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
--include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
--include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
--include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
-+include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
-+include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
-+include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
-+include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
-+include { SNAPALIGNER_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
-+include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
-
-
+@@ -16,55 +16,66 @@
workflow FASTQ_ALIGN_DNA {
take:
@@ -70,7 +53,6 @@ Changes in 'fastq_align_dna/main.nf':
- BOWTIE2_ALIGN(ch_reads, ch_aligner_index, ch_fasta, false, sort) // if aligner is bowtie2
+ BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort) // if aligner is bowtie2
ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
-- ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions)
- }
- else if (aligner == 'bwamem'){
- BWAMEM1_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem
@@ -87,7 +69,6 @@ Changes in 'fastq_align_dna/main.nf':
+
+ BWAMEM2_MEM (ch_to_align.bwamem2, sort) // If aligner is bwa-mem2
ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
-- ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions)
- }
- else if (aligner == 'dragmap'){
- DRAGMAP_ALIGN(ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is dragmap
@@ -106,13 +87,6 @@ Changes in 'fastq_align_dna/main.nf':
- }
- else if (aligner == 'strobealign'){
- STROBEALIGN (ch_reads, ch_fasta, ch_aligner_index, sort) // If aligner is strobealign
-- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
-- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
-- ch_versions = ch_versions.mix(STROBEALIGN.out.versions)
-- }
-- else {
-- error "Unknown aligner: ${aligner}"
-- }
+ ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions.first())
+
+ SNAPALIGNER_ALIGN(ch_to_align.snap) // If aligner is snap
@@ -121,8 +95,13 @@ Changes in 'fastq_align_dna/main.nf':
+ ch_versions = ch_versions.mix(SNAPALIGNER_ALIGN.out.versions.first())
+
+ STROBEALIGN(ch_to_align.strobe, sort) // If aligner is strobealign
-+ ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
-+ ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
+ ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
+ ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
+- ch_versions = ch_versions.mix(STROBEALIGN.out.versions)
+- }
+- else {
+- error "Unknown aligner: ${aligner}"
+- }
+ ch_versions = ch_versions.mix(STROBEALIGN.out.versions.first())
emit:
diff --git a/subworkflows/nf-core/fastq_align_dna/main.nf b/subworkflows/nf-core/fastq_align_dna/main.nf
index 95cdf670..37e62d70 100644
--- a/subworkflows/nf-core/fastq_align_dna/main.nf
+++ b/subworkflows/nf-core/fastq_align_dna/main.nf
@@ -5,12 +5,12 @@
//
-include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
-include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
-include { BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
-include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
-include { SNAPALIGNER_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
-include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
+include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
+include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
+include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
+include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
+include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
+include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
@@ -73,8 +73,8 @@ workflow FASTQ_ALIGN_DNA {
ch_versions = ch_versions.mix(SNAPALIGNER_ALIGN.out.versions.first())
STROBEALIGN(ch_to_align.strobe, sort) // If aligner is strobealign
- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
+ ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
+ ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
ch_versions = ch_versions.mix(STROBEALIGN.out.versions.first())
emit:
diff --git a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
index 9e34d924..60e6bea9 100644
--- a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
@@ -9,14 +9,14 @@
],
[
- "versions.yml:md5,792091aac50160e3fbc865eba482e0c4"
+
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:46:20.36265064"
+ "timestamp": "2026-02-09T16:57:50.690737"
},
"test_fastq_align_dragmap_PE": {
"content": [
@@ -113,14 +113,14 @@
],
[
- "versions.yml:md5,792091aac50160e3fbc865eba482e0c4"
+
]
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-23T11:46:07.813351063"
+ "timestamp": "2026-02-09T16:57:37.848527"
},
"test_fastq_align_bwa_mem_PE": {
"content": [
@@ -144,13 +144,13 @@
"test_fastq_align_bowtie2_SE": {
"content": [
"test.bam",
- "versions.yml:md5,ef191e9624d747934f15d368715d87db"
+ null
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T14:20:30.468391"
+ "timestamp": "2026-02-03T15:14:58.560970561"
},
"test_fastq_align_dragmap_SE": {
"content": [
@@ -174,13 +174,13 @@
"test_fastq_align_bowtie2_PE": {
"content": [
"test.bam",
- "versions.yml:md5,ef191e9624d747934f15d368715d87db"
+ null
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-03-24T14:25:41.372083"
+ "timestamp": "2026-02-03T15:15:05.862448716"
},
"test_fastq_align_snapaligner_PE": {
"content": [
From fca02a203d4bbaf161bbd1afe595a920ec4b6e26 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 20:05:41 +0100
Subject: [PATCH 162/228] update remaining modules
---
modules.json | 12 +-
modules/nf-core/fastp/main.nf | 22 +-
modules/nf-core/fastp/meta.yml | 29 +-
modules/nf-core/fastp/tests/main.nf.test | 18 +-
modules/nf-core/fastp/tests/main.nf.test.snap | 326 ++++++++++++------
modules/nf-core/gnu/sort/main.nf | 10 +-
modules/nf-core/gnu/sort/meta.yml | 26 +-
modules/nf-core/gnu/sort/tests/main.nf.test | 20 +-
.../nf-core/gnu/sort/tests/main.nf.test.snap | 110 +++---
modules/nf-core/mosdepth/environment.yml | 3 +-
modules/nf-core/mosdepth/main.nf | 25 +-
modules/nf-core/mosdepth/meta.yml | 28 +-
modules/nf-core/mosdepth/mosdepth.diff | 4 +-
modules/nf-core/mosdepth/tests/main.nf.test | 68 ++--
.../nf-core/mosdepth/tests/main.nf.test.snap | 112 ++++--
.../nf-core/mosdepth/tests/nextflow.config | 5 +
.../nf-core/mosdepth/tests/quantized.config | 3 -
.../nf-core/mosdepth/tests/threshold.config | 3 -
modules/nf-core/mosdepth/tests/window.config | 3 -
modules/nf-core/samtools/convert/main.nf | 15 +-
modules/nf-core/samtools/convert/meta.yml | 31 +-
.../samtools/convert/tests/main.nf.test | 87 ++---
.../samtools/convert/tests/main.nf.test.snap | 158 ++++-----
modules/nf-core/samtools/coverage/main.nf | 7 +-
modules/nf-core/samtools/coverage/meta.yml | 32 +-
.../samtools/coverage/tests/main.nf.test.snap | 60 +++-
modules/nf-core/samtools/sort/meta.yml | 1 +
27 files changed, 716 insertions(+), 502 deletions(-)
create mode 100644 modules/nf-core/mosdepth/tests/nextflow.config
delete mode 100644 modules/nf-core/mosdepth/tests/quantized.config
delete mode 100644 modules/nf-core/mosdepth/tests/threshold.config
delete mode 100644 modules/nf-core/mosdepth/tests/window.config
diff --git a/modules.json b/modules.json
index 5413652a..4ec35dbd 100644
--- a/modules.json
+++ b/modules.json
@@ -48,12 +48,12 @@
},
"fastp": {
"branch": "master",
- "git_sha": "b8f1de0ac853ae5b56c63450d47438f899c553d0",
+ "git_sha": "a331ecfd1aa48b2b2298aab23bb4516c800e410b",
"installed_by": ["modules"]
},
"gnu/sort": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "f35fac92470336be03b96bae7547d81d88a3331a",
"installed_by": ["modules"]
},
"md5sum": {
@@ -63,7 +63,7 @@
},
"mosdepth": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "6832b69ef7f98c54876d6436360b6b945370c615",
"installed_by": ["modules"],
"patch": "modules/nf-core/mosdepth/mosdepth.diff"
},
@@ -93,13 +93,13 @@
},
"samtools/convert": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "51fa714751883254ede046c50acf20076b46ca81",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/convert/samtools-convert.diff"
},
"samtools/coverage": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "4154ced8a82f5f17b57e48c68dbb03ecb0e9ca14",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
@@ -121,7 +121,7 @@
},
"samtools/sort": {
"branch": "master",
- "git_sha": "0b2435805036a16dcdcf21533632d956b8273ac4",
+ "git_sha": "5cb9a8694da0a0e550921636bb60bc8c56445fd7",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/sort/samtools-sort.diff"
},
diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf
index 7538fc3a..e13509ca 100644
--- a/modules/nf-core/fastp/main.nf
+++ b/modules/nf-core/fastp/main.nf
@@ -20,7 +20,7 @@ process FASTP {
tuple val(meta), path('*.log') , emit: log
tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail
tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('fastp'), eval('fastp --version 2>&1 | sed -e "s/fastp //g"'), emit: versions_fastp, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -49,11 +49,6 @@ process FASTP {
$args \\
2>| >(tee ${prefix}.fastp.log >&2) \\
| gzip -c > ${prefix}.fastp.fastq.gz
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
- END_VERSIONS
"""
} else if (meta.single_end) {
"""
@@ -69,11 +64,6 @@ process FASTP {
$fail_fastq \\
$args \\
2>| >(tee ${prefix}.fastp.log >&2)
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
- END_VERSIONS
"""
} else {
def merge_fastq = save_merged ? "-m --merged_out ${prefix}.merged.fastq.gz" : ''
@@ -94,11 +84,6 @@ process FASTP {
--detect_adapter_for_pe \\
$args \\
2>| >(tee ${prefix}.fastp.log >&2)
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
- END_VERSIONS
"""
}
@@ -115,10 +100,5 @@ process FASTP {
touch "${prefix}.fastp.json"
touch "${prefix}.fastp.html"
touch "${prefix}.fastp.log"
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- fastp: \$(fastp --version 2>&1 | sed -e "s/fastp //g")
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/fastp/meta.yml b/modules/nf-core/fastp/meta.yml
index 324025fe..a67be395 100644
--- a/modules/nf-core/fastp/meta.yml
+++ b/modules/nf-core/fastp/meta.yml
@@ -54,6 +54,7 @@ output:
description: The trimmed/modified/unmerged fastq reads
pattern: "*fastp.fastq.gz"
ontologies:
+ - edam: http://edamontology.org/format_1930 # FASTQ
- edam: http://edamontology.org/format_3989 # GZIP format
json:
- - meta:
@@ -100,6 +101,7 @@ output:
description: Reads the failed the preprocessing
pattern: "*fail.fastq.gz"
ontologies:
+ - edam: http://edamontology.org/format_1930 # FASTQ
- edam: http://edamontology.org/format_3989 # GZIP format
reads_merged:
- - meta:
@@ -112,16 +114,31 @@ output:
description: Reads that were successfully merged
pattern: "*.{merged.fastq.gz}"
ontologies: []
+ versions_fastp:
+ - - "${task.process}":
+ type: string
+ description: The name of the process
+ - fastp:
+ type: string
+ description: The name of the tool
+ - 'fastp --version 2>&1 | sed -e "s/fastp //g"':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - "${task.process}":
+ type: string
+ description: The name of the process
+ - fastp:
+ type: string
+ description: The name of the tool
+ - 'fastp --version 2>&1 | sed -e "s/fastp //g"':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@drpatelh"
- "@kevinmenden"
+ - "@eit-maxlcummins"
maintainers:
- "@drpatelh"
- "@kevinmenden"
diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test
index 5125705c..b7901578 100644
--- a/modules/nf-core/fastp/tests/main.nf.test
+++ b/modules/nf-core/fastp/tests/main.nf.test
@@ -39,7 +39,7 @@ nextflow_process {
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
- process.out.versions).match()
+ process.out.findAll { key, val -> key.startsWith('versions') }).match()
}
)
}
@@ -80,7 +80,7 @@ nextflow_process {
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
@@ -117,7 +117,7 @@ nextflow_process {
{ assert process.out.reads_merged == [] },
{ assert snapshot(
process.out.reads,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
@@ -154,7 +154,7 @@ nextflow_process {
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
@@ -194,7 +194,7 @@ nextflow_process {
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
@@ -233,7 +233,7 @@ nextflow_process {
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
- process.out.versions).match() },
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() },
)
}
}
@@ -272,7 +272,7 @@ nextflow_process {
process.out.reads,
process.out.reads_fail,
process.out.reads_merged,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
@@ -312,7 +312,7 @@ nextflow_process {
process.out.reads_fail,
process.out.reads_merged,
process.out.reads_merged,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
@@ -354,7 +354,7 @@ nextflow_process {
process.out.reads_fail,
process.out.reads_merged,
process.out.reads_merged,
- process.out.versions).match() }
+ process.out.findAll { key, val -> key.startsWith('versions') }).match() }
)
}
}
diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap
index 2276fc08..56772358 100644
--- a/modules/nf-core/fastp/tests/main.nf.test.snap
+++ b/modules/nf-core/fastp/tests/main.nf.test.snap
@@ -39,7 +39,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -77,16 +81,20 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-11T09:55:42.073182"
+ "timestamp": "2026-01-22T13:00:52.14535813"
},
"test_fastp_paired_end": {
"content": [
@@ -108,15 +116,21 @@
[
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:32:22.887952042"
+ "timestamp": "2026-01-23T09:46:26.421773402"
},
"test_fastp_paired_end_merged_adapterlist": {
"content": [
@@ -144,15 +158,21 @@
"test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5"
]
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:32:53.752975682"
+ "timestamp": "2026-01-23T09:46:59.832295907"
},
"test_fastp_single_end_qc_only": {
"content": [
@@ -174,15 +194,21 @@
[
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-19T16:23:36.149003"
+ "timestamp": "2026-01-23T09:47:06.486959565"
},
"test_fastp_paired_end_trim_fail": {
"content": [
@@ -214,15 +240,21 @@
[
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:32:41.270456637"
+ "timestamp": "2026-01-23T09:46:46.736511024"
},
"fastp - stub test_fastp_interleaved": {
"content": [
@@ -270,7 +302,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -314,16 +350,20 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-11T09:55:19.47199"
+ "timestamp": "2026-01-22T13:00:16.097071654"
},
"test_fastp_single_end - stub": {
"content": [
@@ -371,7 +411,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -415,16 +459,20 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-11T09:55:09.617001"
+ "timestamp": "2026-01-22T13:00:03.317192706"
},
"test_fastp_paired_end_merged_adapterlist - stub": {
"content": [
@@ -481,7 +529,11 @@
]
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -534,16 +586,20 @@
"test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:33:44.204950729"
+ "timestamp": "2026-01-22T13:00:44.851708205"
},
"test_fastp_paired_end_merged - stub": {
"content": [
@@ -600,7 +656,11 @@
]
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -653,16 +713,20 @@
"test.merged.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:33:38.518882433"
+ "timestamp": "2026-01-22T13:00:37.581047713"
},
"test_fastp_paired_end_merged": {
"content": [
@@ -690,15 +754,21 @@
"test.merged.fastq.gz:md5,c873bb1ab3fa859dcc47306465e749d5"
]
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:32:47.366974895"
+ "timestamp": "2026-01-23T09:46:53.190202914"
},
"test_fastp_paired_end - stub": {
"content": [
@@ -749,7 +819,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -796,16 +870,20 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:33:16.494574544"
+ "timestamp": "2026-01-22T13:00:09.585957282"
},
"test_fastp_single_end": {
"content": [
@@ -824,15 +902,21 @@
[
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-19T16:23:08.469846"
+ "timestamp": "2026-01-23T09:46:19.624824985"
},
"test_fastp_single_end_trim_fail - stub": {
"content": [
@@ -886,7 +970,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -936,16 +1024,20 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-11T09:55:23.871395"
+ "timestamp": "2026-01-22T13:00:22.800659826"
},
"test_fastp_paired_end_trim_fail - stub": {
"content": [
@@ -1006,7 +1098,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -1063,16 +1159,20 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.04.8"
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-12-22T14:33:32.863505882"
+ "timestamp": "2026-01-22T13:00:30.271734068"
},
"fastp test_fastp_interleaved": {
"content": [
@@ -1085,15 +1185,21 @@
"test.fastp.fastq.gz:md5,217d62dc13a23e92513a1bd8e1bcea39"
]
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-19T16:23:16.479494"
+ "timestamp": "2026-01-23T09:46:33.4628687"
},
"test_fastp_single_end_trim_fail": {
"content": [
@@ -1118,15 +1224,21 @@
[
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-19T16:23:20.299076"
+ "timestamp": "2026-01-23T09:46:39.895973372"
},
"test_fastp_paired_end_qc_only": {
"content": [
@@ -1148,15 +1260,21 @@
[
],
- [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
- ]
+ {
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-19T16:23:40.113724"
+ "timestamp": "2026-01-23T09:47:13.015833707"
},
"test_fastp_paired_end_qc_only - stub": {
"content": [
@@ -1198,7 +1316,11 @@
],
"6": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
],
"html": [
[
@@ -1236,15 +1358,19 @@
"reads_merged": [
],
- "versions": [
- "versions.yml:md5,c4974822658d02533e660fae343f281b"
+ "versions_fastp": [
+ [
+ "FASTP",
+ "fastp",
+ "1.0.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-11T09:55:46.696419"
+ "timestamp": "2026-01-22T13:00:59.670106791"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/gnu/sort/main.nf b/modules/nf-core/gnu/sort/main.nf
index 6190210d..a16f6291 100644
--- a/modules/nf-core/gnu/sort/main.nf
+++ b/modules/nf-core/gnu/sort/main.nf
@@ -12,7 +12,7 @@ process GNU_SORT {
output:
tuple val(meta), path( "${output_file}" ) , emit: sorted
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('coreutils'), eval("sort --version |& sed '1!d ; s/sort (GNU coreutils) //'"), emit: versions_coreutils, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -26,10 +26,6 @@ process GNU_SORT {
"""
sort ${args} ${input} > ${output_file}
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- coreutils: \$(sort --version |& sed '1!d ; s/sort (GNU coreutils) //')
- END_VERSIONS
"""
stub:
@@ -40,9 +36,5 @@ process GNU_SORT {
"""
touch ${output_file}
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- coreutils: \$(sort --version |& sed '1!d ; s/sort (GNU coreutils) //')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/gnu/sort/meta.yml b/modules/nf-core/gnu/sort/meta.yml
index feba2c1f..48dde4a0 100644
--- a/modules/nf-core/gnu/sort/meta.yml
+++ b/modules/nf-core/gnu/sort/meta.yml
@@ -42,13 +42,27 @@ output:
Groovy Map containing sample information
e.g. [ id:'test', single_end:false ]
pattern: "${output_file}"
+ versions_coreutils:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - coreutils:
+ type: string
+ description: The tool name
+ - "sort --version |& sed '1!d ; s/sort (GNU coreutils) //'":
+ type: string
+ description: The command used to generate the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - coreutils:
+ type: string
+ description: The tool name
+ - "sort --version |& sed '1!d ; s/sort (GNU coreutils) //'":
+ type: string
+ description: The command used to generate the version of the tool
authors:
- "@DLBPointon"
maintainers:
diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test b/modules/nf-core/gnu/sort/tests/main.nf.test
index e4030187..dbe473d2 100644
--- a/modules/nf-core/gnu/sort/tests/main.nf.test
+++ b/modules/nf-core/gnu/sort/tests/main.nf.test
@@ -27,11 +27,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() },
- { assert snapshot(
- file(process.out.sorted[0][1]).name
- ).match("genome_sort")
- }
+ { assert snapshot(process.out).match() }
)
}
@@ -54,11 +50,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() },
- { assert snapshot(
- file(process.out.sorted[0][1]).name
- ).match("interval_sort")
- }
+ { assert snapshot(process.out).match() }
)
}
@@ -82,11 +74,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() },
- { assert snapshot(
- file(process.out.sorted[0][1]).name
- ).match("csv_sort")
- }
+ { assert snapshot(process.out).match() }
)
}
@@ -111,7 +99,7 @@ nextflow_process {
then {
assertAll (
{ assert process.success },
- { assert snapshot(process.out).match() },
+ { assert snapshot(process.out).match() }
)
}
diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test.snap b/modules/nf-core/gnu/sort/tests/main.nf.test.snap
index 20e17080..f57dc6bb 100644
--- a/modules/nf-core/gnu/sort/tests/main.nf.test.snap
+++ b/modules/nf-core/gnu/sort/tests/main.nf.test.snap
@@ -11,7 +11,11 @@
]
],
"1": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
],
"sorted": [
[
@@ -21,26 +25,20 @@
"test.csv.sorted:md5,0b52d1b4c4a0c6e972c6f94aafd75a1d"
]
],
- "versions": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ "versions_coreutils": [
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
- },
- "timestamp": "2025-04-30T14:27:50.564838"
- },
- "interval_sort": {
- "content": [
- "test.bed.sorted"
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-04-30T14:27:34.740893"
+ "timestamp": "2026-01-23T15:48:28.77537237"
},
"unsorted_csv_sort_stub": {
"content": [
@@ -54,7 +52,11 @@
]
],
"1": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
],
"sorted": [
[
@@ -64,26 +66,20 @@
"test.csv.sorted:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ "versions_coreutils": [
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-04-30T14:28:06.468116"
- },
- "csv_sort": {
- "content": [
- "test.csv.sorted"
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
- },
- "timestamp": "2025-04-30T14:27:50.596931"
+ "timestamp": "2026-01-23T15:48:45.534463019"
},
"unsorted_genome_sort": {
"content": [
@@ -97,7 +93,11 @@
]
],
"1": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
],
"sorted": [
[
@@ -107,26 +107,20 @@
"genome_test.bed.sorted:md5,fd97f7efafdbbfa71d9b560f10b4b048"
]
],
- "versions": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ "versions_coreutils": [
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-04-30T14:27:19.192354"
- },
- "genome_sort": {
- "content": [
- "genome_test.bed.sorted"
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
- },
- "timestamp": "2025-04-30T14:27:19.234221"
+ "timestamp": "2026-01-23T15:47:54.290932481"
},
"unsorted_intervals_sort": {
"content": [
@@ -140,7 +134,11 @@
]
],
"1": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
],
"sorted": [
[
@@ -150,15 +148,19 @@
"test.bed.sorted:md5,abbce903ef263d38b2f71856387799ab"
]
],
- "versions": [
- "versions.yml:md5,0d7afd9c97fa2ed3cc6273a6158fb1c8"
+ "versions_coreutils": [
+ [
+ "GNU_SORT",
+ "coreutils",
+ "9.5"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.4"
+ "nf-test": "0.9.3",
+ "nextflow": "25.04.8"
},
- "timestamp": "2025-04-30T14:27:34.711885"
+ "timestamp": "2026-01-23T15:48:11.626509684"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml
index 97c93721..1c7f3ee8 100644
--- a/modules/nf-core/mosdepth/environment.yml
+++ b/modules/nf-core/mosdepth/environment.yml
@@ -5,6 +5,5 @@ channels:
- bioconda
dependencies:
# renovate: datasource=conda depName=bioconda/mosdepth
- - mosdepth=0.3.11=h0ec343a_1
- # renovate: datasource=conda depName=bioconda/htslib
- htslib=1.22.1
+ - mosdepth=0.3.11=h0ec343a_1
diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf
index 8166ac0b..b5ee3823 100644
--- a/modules/nf-core/mosdepth/main.nf
+++ b/modules/nf-core/mosdepth/main.nf
@@ -23,7 +23,7 @@ process MOSDEPTH {
tuple val(meta), path('*.quantized.bed.gz.csi') , optional:true, emit: quantized_csi
tuple val(meta), path('*.thresholds.bed.gz') , optional:true, emit: thresholds_bed
tuple val(meta), path('*.thresholds.bed.gz.csi'), optional:true, emit: thresholds_csi
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('mosdepth'), eval("mosdepth --version | sed 's/mosdepth //g'"), topic: versions, emit: versions_mosdepth
when:
task.ext.when == null || task.ext.when
@@ -33,11 +33,11 @@ process MOSDEPTH {
def prefix = task.ext.prefix ?: "${meta.id}"
def reference = fasta ? "--fasta ${fasta}" : ""
def interval = bed ? "--by ${bed}" : ""
- if (bed && args.contains("--by")) {
+ if (bed && (args.contains("--by") || args.contains("-b "))) {
error "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition"
}
- if (!bed && args.contains("--thresholds")) {
- error "'--thresholds' can only be specified in conjunction with '--by'"
+ if (args.contains("--thresholds") && !(bed || args.contains("--by") || args.contains("-b "))) {
+ error "'--thresholds' can only be specified in conjunction with '--by' or an input bed file"
}
"""
@@ -48,15 +48,17 @@ process MOSDEPTH {
$args \\
$prefix \\
$bam
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//')
- END_VERSIONS
"""
stub:
+ def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
+ if (bed && (args.contains("--by") || args.contains("-b "))) {
+ error "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition"
+ }
+ if (args.contains("--thresholds") && !(bed || args.contains("--by") || args.contains("-b "))) {
+ error "'--thresholds' can only be specified in conjunction with '--by' or an input bed file"
+ }
"""
touch ${prefix}.global.dist.txt
touch ${prefix}.region.dist.txt
@@ -70,10 +72,5 @@ process MOSDEPTH {
touch ${prefix}.quantized.bed.gz.csi
echo "" | gzip > ${prefix}.thresholds.bed.gz
touch ${prefix}.thresholds.bed.gz.csi
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- mosdepth: \$(mosdepth --version 2>&1 | sed 's/^.*mosdepth //; s/ .*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml
index af1ea44a..04c8bfe1 100644
--- a/modules/nf-core/mosdepth/meta.yml
+++ b/modules/nf-core/mosdepth/meta.yml
@@ -178,13 +178,28 @@ output:
description: Index file for BED file with threshold coverage
pattern: "*.{thresholds.bed.gz.csi}"
ontologies: []
+ versions_mosdepth:
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - mosdepth:
+ type: string
+ description: The tool name
+ - "mosdepth --version | sed 's/mosdepth //g'":
+ type: string
+ description: The command used to generate the version of the tool
+
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The process the versions were collected from
+ - mosdepth:
+ type: string
+ description: The tool name
+ - "mosdepth --version | sed 's/mosdepth //g'":
+ type: string
+ description: The command used to generate the version of the tool
authors:
- "@joseespinosa"
- "@drpatelh"
@@ -192,6 +207,5 @@ authors:
- "@matthdsm"
maintainers:
- "@joseespinosa"
- - "@drpatelh"
- "@ramprasadn"
- "@matthdsm"
diff --git a/modules/nf-core/mosdepth/mosdepth.diff b/modules/nf-core/mosdepth/mosdepth.diff
index 59a3adf0..ba8f8c40 100644
--- a/modules/nf-core/mosdepth/mosdepth.diff
+++ b/modules/nf-core/mosdepth/mosdepth.diff
@@ -16,8 +16,6 @@ Changes in 'mosdepth/main.nf':
tuple val(meta), path('*.global.dist.txt') , emit: global_txt
'modules/nf-core/mosdepth/tests/main.nf.test.snap' is unchanged
-'modules/nf-core/mosdepth/tests/threshold.config' is unchanged
-'modules/nf-core/mosdepth/tests/quantized.config' is unchanged
+'modules/nf-core/mosdepth/tests/nextflow.config' is unchanged
'modules/nf-core/mosdepth/tests/main.nf.test' is unchanged
-'modules/nf-core/mosdepth/tests/window.config' is unchanged
************************************************************
diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test
index 0b3c860d..b05dde5b 100644
--- a/modules/nf-core/mosdepth/tests/main.nf.test
+++ b/modules/nf-core/mosdepth/tests/main.nf.test
@@ -7,10 +7,14 @@ nextflow_process {
tag "modules"
tag "modules_nfcore"
tag "mosdepth"
+ config "./nextflow.config"
test("homo_sapiens - bam, bai, []") {
when {
+ params {
+ module_args = ""
+ }
process {
"""
input[0] = [
@@ -25,9 +29,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -36,6 +40,9 @@ nextflow_process {
test("homo_sapiens - bam, bai, bed") {
when {
+ params {
+ module_args = ""
+ }
process {
"""
input[0] = [
@@ -50,9 +57,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -61,6 +68,9 @@ nextflow_process {
test("homo_sapiens - cram, crai, []") {
when {
+ params {
+ module_args = ""
+ }
process {
"""
input[0] = [
@@ -78,9 +88,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -89,6 +99,9 @@ nextflow_process {
test("homo_sapiens - cram, crai, bed") {
when {
+ params {
+ module_args = ""
+ }
process {
"""
input[0] = [
@@ -106,9 +119,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -116,8 +129,10 @@ nextflow_process {
test("homo_sapiens - bam, bai, [] - window") {
- config "./window.config"
when {
+ params {
+ module_args = "--by 100"
+ }
process {
"""
input[0] = [
@@ -132,9 +147,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -142,8 +157,10 @@ nextflow_process {
test("homo_sapiens - bam, bai, [] - quantized") {
- config "./quantized.config"
when {
+ params {
+ module_args = "--quantize 0:1:4:100:200"
+ }
process {
"""
input[0] = [
@@ -158,9 +175,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -168,8 +185,10 @@ nextflow_process {
test("homo_sapiens - bam, bai, bed - thresholds") {
- config "./threshold.config"
when {
+ params {
+ module_args = "--thresholds 1,10,20,30"
+ }
process {
"""
input[0] = [
@@ -184,9 +203,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
@@ -194,8 +213,10 @@ nextflow_process {
test("homo_sapiens - bam, bai, bed - fail") {
- config "./window.config"
when {
+ params {
+ module_args = "--by 100"
+ }
process {
"""
input[0] = [
@@ -210,9 +231,7 @@ nextflow_process {
}
then {
- assertAll(
- { assert process.failed }
- )
+ assert process.failed
}
}
@@ -221,6 +240,9 @@ nextflow_process {
options "-stub"
when {
+ params {
+ module_args = ""
+ }
process {
"""
input[0] = [
@@ -235,9 +257,9 @@ nextflow_process {
}
then {
+ assert process.success
assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(process.out).match()}
)
}
diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap
index a063dd9f..c27fcc79 100644
--- a/modules/nf-core/mosdepth/tests/main.nf.test.snap
+++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap
@@ -39,7 +39,11 @@
]
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
[
@@ -221,8 +225,12 @@
"test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -260,7 +268,11 @@
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
[
@@ -394,8 +406,12 @@
"thresholds_csi": [
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -433,7 +449,11 @@
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
@@ -555,8 +575,12 @@
"thresholds_csi": [
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -594,7 +618,11 @@
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
[
@@ -728,8 +756,12 @@
"thresholds_csi": [
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -767,7 +799,11 @@
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
[
@@ -901,8 +937,12 @@
"thresholds_csi": [
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -940,7 +980,11 @@
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
@@ -1038,8 +1082,12 @@
"thresholds_csi": [
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -1077,7 +1125,11 @@
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
@@ -1175,8 +1227,12 @@
"thresholds_csi": [
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
@@ -1226,7 +1282,11 @@
]
],
"12": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
],
"2": [
[
@@ -1372,8 +1432,12 @@
"test.thresholds.bed.gz.csi:md5,2c52ab89e7496af475de3cb2ca04c7b3"
]
],
- "versions": [
- "versions.yml:md5,74f14bf8082836f8dc941b8c77c176fb"
+ "versions_mosdepth": [
+ [
+ "MOSDEPTH",
+ "mosdepth",
+ "0.3.11"
+ ]
]
}
],
diff --git a/modules/nf-core/mosdepth/tests/nextflow.config b/modules/nf-core/mosdepth/tests/nextflow.config
new file mode 100644
index 00000000..b21c05b5
--- /dev/null
+++ b/modules/nf-core/mosdepth/tests/nextflow.config
@@ -0,0 +1,5 @@
+process {
+ withName: "MOSDEPTH" {
+ ext.args = params.module_args
+ }
+}
diff --git a/modules/nf-core/mosdepth/tests/quantized.config b/modules/nf-core/mosdepth/tests/quantized.config
deleted file mode 100644
index c208a4ce..00000000
--- a/modules/nf-core/mosdepth/tests/quantized.config
+++ /dev/null
@@ -1,3 +0,0 @@
-process {
- ext.args = "--quantize 0:1:4:100:200"
-}
diff --git a/modules/nf-core/mosdepth/tests/threshold.config b/modules/nf-core/mosdepth/tests/threshold.config
deleted file mode 100644
index 3302da60..00000000
--- a/modules/nf-core/mosdepth/tests/threshold.config
+++ /dev/null
@@ -1,3 +0,0 @@
-process {
- ext.args = "--thresholds 1,10,20,30"
-}
diff --git a/modules/nf-core/mosdepth/tests/window.config b/modules/nf-core/mosdepth/tests/window.config
deleted file mode 100644
index 7f0d08d6..00000000
--- a/modules/nf-core/mosdepth/tests/window.config
+++ /dev/null
@@ -1,3 +0,0 @@
-process {
- ext.args = "--by 100"
-}
diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf
index f4003d42..f302b319 100644
--- a/modules/nf-core/samtools/convert/main.nf
+++ b/modules/nf-core/samtools/convert/main.nf
@@ -8,14 +8,15 @@ process SAMTOOLS_CONVERT {
'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(index), path(fasta), path(fai)
+ tuple val(meta), path(input), path(index)
+ tuple val(meta2), path(fasta), path(fai)
output:
tuple val(meta), path("*.bam") , emit: bam , optional: true
tuple val(meta), path("*.cram") , emit: cram, optional: true
tuple val(meta), path("*.bai") , emit: bai , optional: true
tuple val(meta), path("*.crai") , emit: crai, optional: true
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools
when:
task.ext.when == null || task.ext.when
@@ -34,11 +35,6 @@ process SAMTOOLS_CONVERT {
-o ${prefix}.${output_extension}
samtools index -@${task.cpus} ${prefix}.${output_extension}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
@@ -49,10 +45,5 @@ process SAMTOOLS_CONVERT {
"""
touch ${prefix}.${output_extension}
touch ${prefix}.${output_extension}.${index_extension}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/samtools/convert/meta.yml b/modules/nf-core/samtools/convert/meta.yml
index 519812ab..286f812f 100644
--- a/modules/nf-core/samtools/convert/meta.yml
+++ b/modules/nf-core/samtools/convert/meta.yml
@@ -42,11 +42,6 @@ input:
description: Reference file to create the CRAM file
pattern: "*.{fasta,fa}"
ontologies: []
- - - meta3:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- fai:
type: file
description: Reference index file to create the CRAM file
@@ -97,13 +92,27 @@ output:
description: filtered/converted CRAM index
pattern: "*{.crai}"
ontologies: []
+ 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:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${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:
- "@FriederikeHanssen"
- "@maxulysse"
diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test b/modules/nf-core/samtools/convert/tests/main.nf.test
index cd603c53..638caabe 100644
--- a/modules/nf-core/samtools/convert/tests/main.nf.test
+++ b/modules/nf-core/samtools/convert/tests/main.nf.test
@@ -9,99 +9,88 @@ nextflow_process {
tag "samtools"
tag "samtools/convert"
- test("sarscov2 - [bam, bai], fasta, fai") {
+ test("sarscov2 - [bam, bai], [fasta, fai]") {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
- input[2] = Channel.of([
- [ id:'fai' ], // meta map
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
- ])
+ ]
"""
}
}
then {
- assertAll(
- { assert process.success },
- { assert snapshot(file(process.out.cram[0][1]).name).match("bam_to_cram_alignment") },
- { assert snapshot(file(process.out.crai[0][1]).name).match("bam_to_cram_index") },
- { assert snapshot(process.out.versions).match("bam_to_cram_versions") }
- )
+ assert process.success
+ assert snapshot(
+ process.out.cram.collect{ meta, cram_file -> [ meta, file(cram_file).name] },
+ process.out.crai.collect{ meta, crai_file -> [ meta, file(crai_file).name] },
+ ["versions_samtools": process.out.versions_samtools]
+ ).match()
}
}
- test("homo_sapiens - [cram, crai], fasta, fai") {
+ test("homo_sapiens - [cram, crai], [fasta, fai]") {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
- ])
- input[1] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
- ])
- input[2] = Channel.of([
- [ id:'fai' ], // meta map
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)
- ])
+ ]
"""
}
}
then {
- assertAll(
- { assert process.success },
- { assert snapshot(file(process.out.bam[0][1]).name).match("cram_to_bam_alignment") },
- { assert snapshot(file(process.out.bai[0][1]).name).match("cram_to_bam_alignment_index") },
- { assert snapshot(process.out.versions).match("cram_to_bam_versions") }
- )
+ assert process.success
+ assert snapshot(
+ process.out.bam.collect{ meta, bam_file -> [ meta, file(bam_file).name, bam(bam_file).getReadsMD5()] },
+ process.out.bai.collect{ meta, bai_file -> [ meta, file(bai_file).name] },
+ ["versions_samtools": process.out.versions_samtools]
+ ).match()
}
}
- test("sarscov2 - [bam, bai], fasta, fai - stub") {
+ test("sarscov2 - [bam, bai], [fasta, fai] - stub") {
options "-stub"
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
- input[2] = Channel.of([
- [ id:'fai' ], // meta map
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
- ])
+ ]
"""
}
}
then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match("stub") }
- )
+ assert process.success
+ assert snapshot(sanitizeOutput(process.out)).match()
}
}
}
diff --git a/modules/nf-core/samtools/convert/tests/main.nf.test.snap b/modules/nf-core/samtools/convert/tests/main.nf.test.snap
index a9ef27e0..57e7ccb3 100644
--- a/modules/nf-core/samtools/convert/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/convert/tests/main.nf.test.snap
@@ -1,78 +1,76 @@
{
- "cram_to_bam_alignment": {
- "content": [
- "test.bam"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-03-06T11:14:51.300147176"
- },
- "bam_to_cram_alignment": {
- "content": [
- "test.cram"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-03-06T11:14:36.625470184"
- },
- "cram_to_bam_versions": {
+ "sarscov2 - [bam, bai], [fasta, fai]": {
"content": [
[
- "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
- ]
+ [
+ {
+ "id": "test"
+ },
+ "test.cram"
+ ]
+ ],
+ [
+ [
+ {
+ "id": "test"
+ },
+ "test.cram.crai"
+ ]
+ ],
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_CONVERT",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-10T13:05:31.58641"
+ "timestamp": "2026-02-05T11:02:26.691358025"
},
- "bam_to_cram_versions": {
+ "homo_sapiens - [cram, crai], [fasta, fai]": {
"content": [
[
- "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
- ]
+ [
+ {
+ "id": "test"
+ },
+ "test.bam",
+ "2f11e4fe3390b8ad0a1852616fd1da04"
+ ]
+ ],
+ [
+ [
+ {
+ "id": "test"
+ },
+ "test.bam.bai"
+ ]
+ ],
+ {
+ "versions_samtools": [
+ [
+ "SAMTOOLS_CONVERT",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ }
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2025-09-10T13:05:26.933516"
+ "timestamp": "2026-02-05T11:24:13.012572069"
},
- "stub": {
+ "sarscov2 - [bam, bai], [fasta, fai] - stub": {
"content": [
{
- "0": [
-
- ],
- "1": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.cram:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "2": [
-
- ],
- "3": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "4": [
- "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
- ],
"bai": [
],
@@ -82,8 +80,7 @@
"crai": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.cram.crai:md5,d41d8cd98f00b204e9800998ecf8427e"
]
@@ -91,41 +88,24 @@
"cram": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.cram:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,13f74b35a5030e75c1e819b2cf602db8"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_CONVERT",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
- },
- "timestamp": "2025-09-10T13:05:36.333776"
- },
- "bam_to_cram_index": {
- "content": [
- "test.cram.crai"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-03-06T11:14:36.640009334"
- },
- "cram_to_bam_alignment_index": {
- "content": [
- "test.bam.bai"
- ],
- "meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.3"
},
- "timestamp": "2024-03-06T11:14:51.304477426"
+ "timestamp": "2026-02-05T11:24:19.471055529"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/coverage/main.nf b/modules/nf-core/samtools/coverage/main.nf
index e2adfddd..25754d35 100644
--- a/modules/nf-core/samtools/coverage/main.nf
+++ b/modules/nf-core/samtools/coverage/main.nf
@@ -12,7 +12,7 @@ process SAMTOOLS_COVERAGE {
output:
tuple val(meta), path("*.txt"), emit: coverage
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools
when:
task.ext.when == null || task.ext.when
@@ -32,11 +32,6 @@ process SAMTOOLS_COVERAGE {
-o ${prefix}.txt \\
$reference \\
$input
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//' )
- END_VERSIONS
"""
stub:
diff --git a/modules/nf-core/samtools/coverage/meta.yml b/modules/nf-core/samtools/coverage/meta.yml
index 28dceb03..754f5f49 100644
--- a/modules/nf-core/samtools/coverage/meta.yml
+++ b/modules/nf-core/samtools/coverage/meta.yml
@@ -60,17 +60,33 @@ output:
e.g. [ id:'test', single_end:false ]
- "*.txt":
type: file
- description: Tabulated text containing the coverage at each position or region
- or an ASCII-art histogram (with --histogram).
+ description: Tabulated text containing the coverage at each position or
+ region or an ASCII-art histogram (with --histogram).
pattern: "*.txt"
ontologies: []
+ 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:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${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:
- "@LouisLeNezet"
maintainers:
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 68cc3697..2069c8c1 100644
--- a/modules/nf-core/samtools/coverage/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/coverage/tests/main.nf.test.snap
@@ -12,7 +12,11 @@
]
],
"1": [
- "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
+ [
+ "SAMTOOLS_COVERAGE",
+ "samtools",
+ "1.22.1"
+ ]
],
"coverage": [
[
@@ -23,16 +27,20 @@
"test.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_COVERAGE",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-10T13:06:14.846123"
+ "timestamp": "2026-01-22T10:43:34.392105918"
},
"test_samtools_coverage_bam": {
"content": [
@@ -47,7 +55,11 @@
]
],
"1": [
- "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
+ [
+ "SAMTOOLS_COVERAGE",
+ "samtools",
+ "1.22.1"
+ ]
],
"coverage": [
[
@@ -58,16 +70,20 @@
"test.txt:md5,99a521b3bf53b6acf8055a44a571ea84"
]
],
- "versions": [
- "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_COVERAGE",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.6"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-09-10T13:06:06.18797"
+ "timestamp": "2026-01-22T10:43:08.216921812"
},
"test_samtools_coverage_cram": {
"content": [
@@ -82,7 +98,11 @@
]
],
"1": [
- "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
+ [
+ "SAMTOOLS_COVERAGE",
+ "samtools",
+ "1.22.1"
+ ]
],
"coverage": [
[
@@ -93,15 +113,19 @@
"test.txt:md5,ce896534bac51cfcc97e5508ae907e99"
]
],
- "versions": [
- "versions.yml:md5,a457b33609ed582818fbe3bc2a20008a"
+ "versions_samtools": [
+ [
+ "SAMTOOLS_COVERAGE",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.2"
},
- "timestamp": "2025-10-02T11:22:34.018328"
+ "timestamp": "2026-01-22T10:43:15.389524183"
}
}
\ No newline at end of file
diff --git a/modules/nf-core/samtools/sort/meta.yml b/modules/nf-core/samtools/sort/meta.yml
index 809a57fc..69968304 100644
--- a/modules/nf-core/samtools/sort/meta.yml
+++ b/modules/nf-core/samtools/sort/meta.yml
@@ -131,6 +131,7 @@ topics:
- "samtools version | sed '1!d;s/.* //'":
type: string
description: The command used to generate the version of the tool
+
authors:
- "@drpatelh"
- "@ewels"
From 38dd555289e56357a4efcd85465431380cb9f54d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 20:26:44 +0100
Subject: [PATCH 163/228] topic conversion work
---
modules/nf-core/samtools/convert/main.nf | 3 +-
subworkflows/local/fastq_align_rna/main.nf | 13 +-
.../local/fastq_to_aligned_cram/main.nf | 10 --
.../fastq_align_dna/fastq_align_dna.diff | 145 +++++++++++-------
subworkflows/nf-core/fastq_align_dna/main.nf | 126 ++++++++-------
workflows/preprocessing.nf | 3 -
6 files changed, 149 insertions(+), 151 deletions(-)
diff --git a/modules/nf-core/samtools/convert/main.nf b/modules/nf-core/samtools/convert/main.nf
index f302b319..c3ee32ac 100644
--- a/modules/nf-core/samtools/convert/main.nf
+++ b/modules/nf-core/samtools/convert/main.nf
@@ -8,8 +8,7 @@ process SAMTOOLS_CONVERT {
'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(index)
- tuple val(meta2), path(fasta), path(fai)
+ tuple val(meta), path(input), path(index), path(fasta), path(fai)
output:
tuple val(meta), path("*.bam") , emit: bam , optional: true
diff --git a/subworkflows/local/fastq_align_rna/main.nf b/subworkflows/local/fastq_align_rna/main.nf
index 5e86bff2..676b6172 100644
--- a/subworkflows/local/fastq_align_rna/main.nf
+++ b/subworkflows/local/fastq_align_rna/main.nf
@@ -16,7 +16,6 @@ workflow FASTQ_ALIGN_RNA {
main:
ch_bam = channel.empty()
ch_reports = channel.empty()
- ch_versions = channel.empty()
ch_reads_aligner_index_gtf
.branch { meta, reads, aligner, index, gtf ->
@@ -42,23 +41,15 @@ workflow FASTQ_ALIGN_RNA {
)
// Concatenate splice junction files
- def ch_splice_junctions_to_merge = group_junctions(STAR_ALIGN.out.spl_junc_tab)
-
- SORT_MERGE_SPLICE_JUNCTIONS(ch_splice_junctions_to_merge)
- ch_versions = ch_versions.mix(SORT_MERGE_SPLICE_JUNCTIONS.out.versions.first())
-
+ SORT_MERGE_SPLICE_JUNCTIONS(group_junctions(STAR_ALIGN.out.spl_junc_tab))
// Concatenate junction files
- def ch_junctions_to_merge = group_junctions(STAR_ALIGN.out.junction)
-
- SORT_MERGE_JUNCTIONS(ch_junctions_to_merge)
- ch_versions = ch_versions.mix(SORT_MERGE_JUNCTIONS.out.versions.first())
+ SORT_MERGE_JUNCTIONS(group_junctions(STAR_ALIGN.out.junction))
emit:
bam = ch_bam // channel: [ [meta], bam ]
splice_junctions = SORT_MERGE_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
junctions = SORT_MERGE_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
reports = ch_reports // channel: [ [meta], log ]
- versions = ch_versions // channel: [ versions.yml ]
}
def group_junctions(ch) {
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index 226e97b9..9ce33bc8 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -22,8 +22,6 @@ workflow FASTQ_TO_CRAM {
ch_meta_reads_aligner_index_fasta_gtf // channel: [mandatory] [meta, [fastq, ...], aligner [bowtie2, bwamem, bwamem2, dragmap, snap, star], aligner_index, fasta, gtf]
main:
-
- ch_versions = channel.empty()
ch_sormadup_metrics = channel.empty()
/*
@@ -33,7 +31,6 @@ workflow FASTQ_TO_CRAM {
*/
ch_meta_reads_aligner_index_fasta_gtf.dump(tag: "FASTQ_TO_CRAM: reads to align", pretty: true)
-
ch_meta_reads_aligner_index_fasta_gtf
.branch { meta, reads, aligner, index, fasta, gtf ->
rna: meta.sample_type == "RNA"
@@ -51,12 +48,9 @@ workflow FASTQ_TO_CRAM {
ch_meta_reads_aligner_index_fasta_datatype.dna,
false,
)
- ch_versions = ch_versions.mix(FASTQ_ALIGN_DNA.out.versions)
-
FASTQ_ALIGN_RNA(
ch_meta_reads_aligner_index_fasta_datatype.rna
)
- ch_versions = ch_versions.mix(FASTQ_ALIGN_DNA.out.versions)
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -110,13 +104,11 @@ workflow FASTQ_TO_CRAM {
BIOBAMBAM_BAMSORMADUP(ch_bam_fasta.bamsormadup)
ch_markdup_index = ch_markdup_index.mix(BIOBAMBAM_BAMSORMADUP.out.bam.join(BIOBAMBAM_BAMSORMADUP.out.bam_index, failOnMismatch: true, failOnDuplicate: true))
ch_sormadup_metrics = ch_sormadup_metrics.mix(BIOBAMBAM_BAMSORMADUP.out.metrics)
- ch_versions = ch_versions.mix(BIOBAMBAM_BAMSORMADUP.out.versions.first())
// SAMTOOLS_SORMADUP([meta, [bam, bam]], fasta)
SAMTOOLS_SORMADUP(ch_bam_fasta.samtools)
ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORMADUP.out.cram.join(SAMTOOLS_SORMADUP.out.crai, failOnMismatch: true, failOnDuplicate: true))
ch_sormadup_metrics = ch_sormadup_metrics.mix(SAMTOOLS_SORMADUP.out.metrics)
- ch_versions = ch_versions.mix(SAMTOOLS_SORMADUP.out.versions.first())
// Merge bam files and compress
// SAMTOOLS_SORT([meta, [bam, bam], fasta],index_format)
@@ -147,7 +139,6 @@ workflow FASTQ_TO_CRAM {
.set { ch_bam_bai_fasta_fai }
SAMTOOLS_CONVERT(ch_bam_bai_fasta_fai)
- ch_versions = ch_versions.mix(SAMTOOLS_CONVERT.out.versions.first())
ch_markdup_index.cram
.mix(
@@ -162,5 +153,4 @@ workflow FASTQ_TO_CRAM {
rna_junctions = FASTQ_ALIGN_RNA.out.junctions
sormadup_metrics = ch_sormadup_metrics
align_reports = FASTQ_ALIGN_DNA.out.reports
- versions = ch_versions
}
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 dbe123ad..5aec63ce 100644
--- a/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
+++ b/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
@@ -3,7 +3,24 @@ Changes in component 'nf-core/fastq_align_dna'
Changes in 'fastq_align_dna/main.nf':
--- subworkflows/nf-core/fastq_align_dna/main.nf
+++ subworkflows/nf-core/fastq_align_dna/main.nf
-@@ -16,55 +16,66 @@
+@@ -5,70 +5,75 @@
+ //
+
+
+-include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
+-include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
+-include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
+-include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
+-include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
+-include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
++include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
++include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
++include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
++include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
++include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
++include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
+
+
workflow FASTQ_ALIGN_DNA {
take:
@@ -12,8 +29,8 @@ Changes in 'fastq_align_dna/main.nf':
- ch_fasta // channel: [mandatory] fasta file
- aligner // string: [mandatory] aligner [bowtie2, bwamem, bwamem2, dragmap, snap]
- sort // boolean: [mandatory] true -> sort, false -> don't sort
-+ ch_reads_aligner_index_fasta // channel: [mandatory] reads, aligner, index, fasta
-+ sort // boolean: [mandatory] true -> sort, false -> don't sort
++ ch_reads_aligner_index_fasta // channel: [mandatory] reads, aligner, index, fasta
++ sort // boolean: [mandatory] true -> sort, false -> don't sort
main:
@@ -21,62 +38,44 @@ Changes in 'fastq_align_dna/main.nf':
- ch_bam = Channel.empty()
- ch_reports = Channel.empty()
- ch_versions = Channel.empty()
-+ ch_bam_index = channel.empty()
-+ ch_bam = channel.empty()
-+ ch_reports = channel.empty()
-+ ch_versions = channel.empty()
-+
-+ ch_reads_aligner_index_fasta.branch { meta, reads, aligner, index, fasta ->
-+ bowtie2 : aligner == 'bowtie2'
-+ return [meta, reads, index, fasta]
-+ bwamem : aligner == 'bwamem'
-+ return [meta, reads, index, fasta]
-+ bwamem2 : aligner == 'bwamem2'
-+ return [meta, reads, index, fasta]
-+ dragmap : aligner == 'dragmap'
-+ return [meta, reads, index, fasta]
-+ snap : aligner == 'snap'
-+ return [meta, reads, index]
-+ strobe : aligner == 'strobe'
-+ return [meta, reads, fasta, index]
-+ other : true
-+ }
-+ .set{ch_to_align}
-+
-+ // Throw error for all samples with unsupported aligners
-+ ch_to_align.other.map{ meta, _reads, aligner, _index, _fasta ->
-+ error "Unsupported aligner ${aligner} for sample ${meta.id}"
-+ }
++ ch_bam_index = channel.empty()
++ ch_bam = channel.empty()
++ ch_reports = channel.empty()
- // Align fastq files to reference genome and (optionally) sort
+- // Align fastq files to reference genome and (optionally) sort
- if (aligner == 'bowtie2') {
- BOWTIE2_ALIGN(ch_reads, ch_aligner_index, ch_fasta, false, sort) // if aligner is bowtie2
-+ BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort) // if aligner is bowtie2
- ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
-- }
+- ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
++ ch_reads_aligner_index_fasta
++ .branch { meta, reads, aligner, index, fasta ->
++ bowtie2: aligner == 'bowtie2'
++ return [meta, reads, index, fasta]
++ bwamem: aligner == 'bwamem'
++ return [meta, reads, index, fasta]
++ bwamem2: aligner == 'bwamem2'
++ return [meta, reads, index, fasta]
++ dragmap: aligner == 'dragmap'
++ return [meta, reads, index, fasta]
++ snap: aligner == 'snap'
++ return [meta, reads, index]
++ strobe: aligner == 'strobe'
++ return [meta, reads, fasta, index]
++ other: true
+ }
- else if (aligner == 'bwamem'){
- BWAMEM1_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem
-+ ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions.first())
-+
-+ BWAMEM1_MEM (ch_to_align.bwamem, sort) // If aligner is bwa-mem
- ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
- ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
+- ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
+- ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
- ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions)
- }
- else if (aligner == 'bwamem2'){
- BWAMEM2_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem2
-+ ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions.first())
-+
-+ BWAMEM2_MEM (ch_to_align.bwamem2, sort) // If aligner is bwa-mem2
- ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
+- ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
- }
- else if (aligner == 'dragmap'){
- DRAGMAP_ALIGN(ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is dragmap
-+ ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first())
-+
-+ DRAGMAP_ALIGN(ch_to_align.dragmap, sort) // If aligner is dragmap
- ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
- ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
+- ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
+- ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
- ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions)
- }
- else if (aligner == 'snap'){
@@ -87,25 +86,53 @@ Changes in 'fastq_align_dna/main.nf':
- }
- else if (aligner == 'strobealign'){
- STROBEALIGN (ch_reads, ch_fasta, ch_aligner_index, sort) // If aligner is strobealign
-+ ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions.first())
-+
-+ SNAPALIGNER_ALIGN(ch_to_align.snap) // If aligner is snap
-+ ch_bam = ch_bam.mix(SNAPALIGNER_ALIGN.out.bam)
-+ ch_bam_index.mix(SNAPALIGNER_ALIGN.out.bai)
-+ ch_versions = ch_versions.mix(SNAPALIGNER_ALIGN.out.versions.first())
-+
-+ STROBEALIGN(ch_to_align.strobe, sort) // If aligner is strobealign
- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
+- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
+- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
- ch_versions = ch_versions.mix(STROBEALIGN.out.versions)
- }
- else {
- error "Unknown aligner: ${aligner}"
- }
-+ ch_versions = ch_versions.mix(STROBEALIGN.out.versions.first())
++ .set { ch_to_align }
++
++ // Throw error for all samples with unsupported aligners
++ ch_to_align.other.map { meta, _reads, aligner, _index, _fasta ->
++ error("Unsupported aligner ${aligner} for sample ${meta.id}")
++ }
++
++ // Align fastq files to reference genome and (optionally) sort
++ BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort)
++ // if aligner is bowtie2
++ ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
++ BWAMEM1_MEM(ch_to_align.bwamem, sort)
++ // If aligner is bwa-mem
++ ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
++ ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
++ BWAMEM2_MEM(ch_to_align.bwamem2, sort)
++ // If aligner is bwa-mem2
++ ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
++ DRAGMAP_ALIGN(ch_to_align.dragmap, sort)
++ // If aligner is dragmap
++ ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
++ ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
++ SNAP_ALIGN(ch_to_align.snap)
++ // If aligner is snap
++ ch_bam = ch_bam.mix(SNAP_ALIGN.out.bam)
++ ch_bam_index.mix(SNAP_ALIGN.out.bai)
++ STROBEALIGN(ch_to_align.strobe, sort)
++ // If aligner is strobealign
++ ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
++ ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
emit:
- bam = ch_bam // channel: [ [meta], bam ]
+- bam = ch_bam // channel: [ [meta], bam ]
+- bam_index = ch_bam_index // channel: [ [meta], csi/bai ]
+- reports = ch_reports // channel: [ [meta], log ]
+- versions = ch_versions // channel: [ versions.yml ]
++ bam = ch_bam // channel: [ [meta], bam ]
++ bam_index = ch_bam_index // channel: [ [meta], csi/bai ]
++ reports = ch_reports // channel: [ [meta], log ]
+ }
'subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap' is unchanged
'subworkflows/nf-core/fastq_align_dna/tests/main.nf.test' is unchanged
diff --git a/subworkflows/nf-core/fastq_align_dna/main.nf b/subworkflows/nf-core/fastq_align_dna/main.nf
index 37e62d70..3e7cf051 100644
--- a/subworkflows/nf-core/fastq_align_dna/main.nf
+++ b/subworkflows/nf-core/fastq_align_dna/main.nf
@@ -5,81 +5,75 @@
//
-include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
-include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
-include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
-include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
-include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
-include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
+include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
+include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
+include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
+include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
+include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
+include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
workflow FASTQ_ALIGN_DNA {
take:
- ch_reads_aligner_index_fasta // channel: [mandatory] reads, aligner, index, fasta
- sort // boolean: [mandatory] true -> sort, false -> don't sort
+ ch_reads_aligner_index_fasta // channel: [mandatory] reads, aligner, index, fasta
+ sort // boolean: [mandatory] true -> sort, false -> don't sort
main:
- ch_bam_index = channel.empty()
- ch_bam = channel.empty()
- ch_reports = channel.empty()
- ch_versions = channel.empty()
-
- ch_reads_aligner_index_fasta.branch { meta, reads, aligner, index, fasta ->
- bowtie2 : aligner == 'bowtie2'
- return [meta, reads, index, fasta]
- bwamem : aligner == 'bwamem'
- return [meta, reads, index, fasta]
- bwamem2 : aligner == 'bwamem2'
- return [meta, reads, index, fasta]
- dragmap : aligner == 'dragmap'
- return [meta, reads, index, fasta]
- snap : aligner == 'snap'
- return [meta, reads, index]
- strobe : aligner == 'strobe'
- return [meta, reads, fasta, index]
- other : true
- }
- .set{ch_to_align}
-
- // Throw error for all samples with unsupported aligners
- ch_to_align.other.map{ meta, _reads, aligner, _index, _fasta ->
- error "Unsupported aligner ${aligner} for sample ${meta.id}"
+ ch_bam_index = channel.empty()
+ ch_bam = channel.empty()
+ ch_reports = channel.empty()
+
+ ch_reads_aligner_index_fasta
+ .branch { meta, reads, aligner, index, fasta ->
+ bowtie2: aligner == 'bowtie2'
+ return [meta, reads, index, fasta]
+ bwamem: aligner == 'bwamem'
+ return [meta, reads, index, fasta]
+ bwamem2: aligner == 'bwamem2'
+ return [meta, reads, index, fasta]
+ dragmap: aligner == 'dragmap'
+ return [meta, reads, index, fasta]
+ snap: aligner == 'snap'
+ return [meta, reads, index]
+ strobe: aligner == 'strobe'
+ return [meta, reads, fasta, index]
+ other: true
}
-
- // Align fastq files to reference genome and (optionally) sort
- BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort) // if aligner is bowtie2
- ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
- ch_versions = ch_versions.mix(BOWTIE2_ALIGN.out.versions.first())
-
- BWAMEM1_MEM (ch_to_align.bwamem, sort) // If aligner is bwa-mem
- ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
- ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
- ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions.first())
-
- BWAMEM2_MEM (ch_to_align.bwamem2, sort) // If aligner is bwa-mem2
- ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
- ch_versions = ch_versions.mix(BWAMEM2_MEM.out.versions.first())
-
- DRAGMAP_ALIGN(ch_to_align.dragmap, sort) // If aligner is dragmap
- ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
- ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
- ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions.first())
-
- SNAPALIGNER_ALIGN(ch_to_align.snap) // If aligner is snap
- ch_bam = ch_bam.mix(SNAPALIGNER_ALIGN.out.bam)
- ch_bam_index.mix(SNAPALIGNER_ALIGN.out.bai)
- ch_versions = ch_versions.mix(SNAPALIGNER_ALIGN.out.versions.first())
-
- STROBEALIGN(ch_to_align.strobe, sort) // If aligner is strobealign
- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
- ch_versions = ch_versions.mix(STROBEALIGN.out.versions.first())
+ .set { ch_to_align }
+
+ // Throw error for all samples with unsupported aligners
+ ch_to_align.other.map { meta, _reads, aligner, _index, _fasta ->
+ error("Unsupported aligner ${aligner} for sample ${meta.id}")
+ }
+
+ // Align fastq files to reference genome and (optionally) sort
+ BOWTIE2_ALIGN(ch_to_align.bowtie2, false, sort)
+ // if aligner is bowtie2
+ ch_bam = ch_bam.mix(BOWTIE2_ALIGN.out.bam)
+ BWAMEM1_MEM(ch_to_align.bwamem, sort)
+ // If aligner is bwa-mem
+ ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
+ ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
+ BWAMEM2_MEM(ch_to_align.bwamem2, sort)
+ // If aligner is bwa-mem2
+ ch_bam = ch_bam.mix(BWAMEM2_MEM.out.bam)
+ DRAGMAP_ALIGN(ch_to_align.dragmap, sort)
+ // If aligner is dragmap
+ ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
+ ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
+ SNAP_ALIGN(ch_to_align.snap)
+ // If aligner is snap
+ ch_bam = ch_bam.mix(SNAP_ALIGN.out.bam)
+ ch_bam_index.mix(SNAP_ALIGN.out.bai)
+ STROBEALIGN(ch_to_align.strobe, sort)
+ // If aligner is strobealign
+ ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
+ ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
emit:
- bam = ch_bam // channel: [ [meta], bam ]
- bam_index = ch_bam_index // channel: [ [meta], csi/bai ]
- reports = ch_reports // channel: [ [meta], log ]
- versions = ch_versions // channel: [ versions.yml ]
+ bam = ch_bam // channel: [ [meta], bam ]
+ bam_index = ch_bam_index // channel: [ [meta], csi/bai ]
+ reports = ch_reports // channel: [ [meta], log ]
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 365327af..e440222c 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -196,7 +196,6 @@ workflow PREPROCESSING {
false,
)
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
- ch_versions = ch_versions.mix(FASTP.out.versions.first())
// edit meta.id to match sample name
FASTP.out.reads
@@ -240,9 +239,7 @@ workflow PREPROCESSING {
FASTQ_TO_CRAM(
ch_meta_reads_aligner_index_fasta_gtf
)
-
ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics)
- ch_versions = ch_versions.mix(FASTQ_TO_CRAM.out.versions)
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From 2772ae24a79cae082f6ab3b8fa67b2db5f2e606d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 20:35:15 +0100
Subject: [PATCH 164/228] more topic work
---
modules/nf-core/samtools/convert/samtools-convert.diff | 5 ++---
subworkflows/local/coverage/main.nf | 6 ------
workflows/preprocessing.nf | 1 -
3 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/modules/nf-core/samtools/convert/samtools-convert.diff b/modules/nf-core/samtools/convert/samtools-convert.diff
index bd28d5da..2ded55b4 100644
--- a/modules/nf-core/samtools/convert/samtools-convert.diff
+++ b/modules/nf-core/samtools/convert/samtools-convert.diff
@@ -4,13 +4,12 @@ Changes in component 'nf-core/samtools/convert'
Changes in 'samtools/convert/main.nf':
--- modules/nf-core/samtools/convert/main.nf
+++ modules/nf-core/samtools/convert/main.nf
-@@ -8,9 +8,7 @@
+@@ -8,8 +8,7 @@
'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(index)
-- tuple val(meta2), path(fasta)
-- tuple val(meta3), path(fai)
+- tuple val(meta2), path(fasta), path(fai)
+ tuple val(meta), path(input), path(index), path(fasta), path(fai)
output:
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 501b0773..cca3ca59 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -20,18 +20,14 @@ workflow COVERAGE {
return [meta, cram, crai, roi, fasta]
}
)
- ch_versions = ch_versions.mix(MOSDEPTH.out.versions.first())
SAMTOOLS_COVERAGE(
ch_meta_cram_crai_fasta_fai_roi.map { meta, cram, crai, fasta, fai, _roi ->
return [meta, cram, crai, fasta, fai]
}
)
- ch_versions = ch_versions.mix(SAMTOOLS_COVERAGE.out.versions.first())
ch_coverageqc_files = ch_coverageqc_files.merge(SAMTOOLS_COVERAGE.out.coverage)
- ch_genelists.view()
-
PANELCOVERAGE(
MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
if (genelists !instanceof List) {
@@ -52,7 +48,6 @@ workflow COVERAGE {
}
}
)
- ch_versions = ch_versions.mix(PANELCOVERAGE.out.versions.first())
ch_coverageqc_files = ch_coverageqc_files.mix(PANELCOVERAGE.out.regiondist)
emit:
@@ -70,5 +65,4 @@ workflow COVERAGE {
mosdepth_thresholds_csi = MOSDEPTH.out.thresholds_csi
samtools_coverage = SAMTOOLS_COVERAGE.out.coverage
panelcoverage = PANELCOVERAGE.out.regiondist
- versions = ch_versions
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index e440222c..94cb7fdb 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -269,7 +269,6 @@ workflow PREPROCESSING {
COVERAGE.out.mosdepth_regions,
COVERAGE.out.samtools_coverage,
)
- ch_versions = ch_versions.mix(COVERAGE.out.versions)
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From 693fad72f03c1d886f191e5bcf9bc87bedd06b3e Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 20:42:09 +0100
Subject: [PATCH 165/228] add falco for unsupported fastq qc
---
main.nf | 10 ++
modules.json | 5 +
modules/nf-core/falco/environment.yml | 7 ++
modules/nf-core/falco/main.nf | 57 +++++++++
modules/nf-core/falco/meta.yml | 61 ++++++++++
modules/nf-core/falco/tests/main.nf.test | 108 ++++++++++++++++++
modules/nf-core/falco/tests/main.nf.test.snap | 61 ++++++++++
workflows/preprocessing.nf | 11 ++
8 files changed, 320 insertions(+)
create mode 100644 modules/nf-core/falco/environment.yml
create mode 100644 modules/nf-core/falco/main.nf
create mode 100644 modules/nf-core/falco/meta.yml
create mode 100644 modules/nf-core/falco/tests/main.nf.test
create mode 100644 modules/nf-core/falco/tests/main.nf.test.snap
diff --git a/main.nf b/main.nf
index 03dfac1a..6b0e25f3 100644
--- a/main.nf
+++ b/main.nf
@@ -68,6 +68,8 @@ workflow {
demultiplex_reports = PREPROCESSING.out.demultiplex_reports.transpose(by:1)
demultiplex_logs = PREPROCESSING.out.demultiplex_logs.transpose(by:1)
demultiplex_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
+ falco_html = PREPROCESSING.out.falco_html
+ falco_txt = PREPROCESSING.out.falco_txt
fastp_json = PREPROCESSING.out.fastp_json
fastp_html = PREPROCESSING.out.fastp_html
crams = PREPROCESSING.out.crams
@@ -121,6 +123,14 @@ output {
def out_path = meta.library ? "${meta.library}/${meta.samplename}/${fastq.name}" as String : "${meta.samplename}/${fastq.name}"
fastq >> out_path
} }
+ 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
+ } }
+ 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
+ } }
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
diff --git a/modules.json b/modules.json
index 0b710f92..845562bf 100644
--- a/modules.json
+++ b/modules.json
@@ -46,6 +46,11 @@
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
+ "falco": {
+ "branch": "master",
+ "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "installed_by": ["modules"]
+ },
"fastp": {
"branch": "master",
"git_sha": "b8f1de0ac853ae5b56c63450d47438f899c553d0",
diff --git a/modules/nf-core/falco/environment.yml b/modules/nf-core/falco/environment.yml
new file mode 100644
index 00000000..59c973a9
--- /dev/null
+++ b/modules/nf-core/falco/environment.yml
@@ -0,0 +1,7 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
+channels:
+ - conda-forge
+ - bioconda
+dependencies:
+ - bioconda::falco=1.2.1
diff --git a/modules/nf-core/falco/main.nf b/modules/nf-core/falco/main.nf
new file mode 100644
index 00000000..a4b343b2
--- /dev/null
+++ b/modules/nf-core/falco/main.nf
@@ -0,0 +1,57 @@
+process FALCO {
+ tag "$meta.id"
+ label 'process_single'
+
+
+ conda "${moduleDir}/environment.yml"
+ container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+ 'https://depot.galaxyproject.org/singularity/falco:1.2.1--h867801b_3':
+ 'biocontainers/falco:1.2.1--h867801b_3' }"
+
+ input:
+ tuple val(meta), path(reads)
+
+ output:
+ tuple val(meta), path("*.html"), emit: html
+ tuple val(meta), path("*.txt") , emit: txt
+ path "versions.yml" , emit: versions
+
+ when:
+ task.ext.when == null || task.ext.when
+
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ if ( reads.toList().size() == 1 ) {
+ """
+ falco $args --threads $task.cpus ${reads} -D ${prefix}_fastqc_data.txt -S ${prefix}_summary.txt -R ${prefix}_report.html
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ falco:\$( falco --version | sed -e "s/falco//g" )
+ END_VERSIONS
+ """
+ } else {
+ """
+ falco $args --threads $task.cpus ${reads}
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ falco:\$( falco --version | sed -e "s/falco//g" )
+ END_VERSIONS
+ """
+ }
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}_data.txt
+ touch ${prefix}_fastqc_data.html
+ touch ${prefix}_summary.txt
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ falco: \$( falco --version | sed -e "s/falco v//g" )
+ END_VERSIONS
+ """
+}
diff --git a/modules/nf-core/falco/meta.yml b/modules/nf-core/falco/meta.yml
new file mode 100644
index 00000000..1450f2da
--- /dev/null
+++ b/modules/nf-core/falco/meta.yml
@@ -0,0 +1,61 @@
+name: falco
+description: Run falco on sequenced reads
+keywords:
+ - quality control
+ - qc
+ - adapters
+ - fastq
+tools:
+ - fastqc:
+ description: "falco is a drop-in C++ implementation of FastQC to assess the quality
+ of sequence reads."
+ homepage: "https://falco.readthedocs.io/"
+ documentation: "https://falco.readthedocs.io/"
+ licence: ["GPL v3"]
+ identifier: biotools:falco-rna
+input:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - reads:
+ type: file
+ description: |
+ List of input FastQ files of size 1 and 2 for single-end and paired-end data,
+ respectively.
+ ontologies: []
+output:
+ html:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - "*.html":
+ type: file
+ description: FastQC like report
+ pattern: "*_{fastqc_report.html}"
+ ontologies: []
+ txt:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - "*.txt":
+ type: file
+ description: falco report data
+ pattern: "*_{data.txt}"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
+authors:
+ - "@lucacozzuto"
+maintainers:
+ - "@lucacozzuto"
diff --git a/modules/nf-core/falco/tests/main.nf.test b/modules/nf-core/falco/tests/main.nf.test
new file mode 100644
index 00000000..816c72ba
--- /dev/null
+++ b/modules/nf-core/falco/tests/main.nf.test
@@ -0,0 +1,108 @@
+nextflow_process {
+
+ name "Test Process FALCO"
+ script "../main.nf"
+ process "FALCO"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "falco"
+
+ test("sarscov2 - fastq - single end") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:true ],
+ [
+ file(
+ params.test_data['sarscov2']['illumina']['test_1_fastq_gz'],
+ checkIfExists: true
+ ),
+ ],
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.txt,
+ file(process.out.html.get(0).get(1)).list(),
+ ).match()
+ },
+ )
+ }
+
+ }
+
+ test("sarscov2 - fastq - paired end") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:false ],
+ [
+ file(
+ params.test_data['sarscov2']['illumina']['test_1_fastq_gz'],
+ checkIfExists: true
+ ),
+ file(
+ params.test_data['sarscov2']['illumina']['test_2_fastq_gz'],
+ checkIfExists: true
+ ),
+ ],
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.txt,
+ process.out.html.get(0).get(1).collect{ it.split("/")[-1] }.sort(),
+ ).match()
+ },
+ )
+ }
+
+ }
+
+ test("sarscov2 - fastq - interleaved") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:false ],
+ [
+ file(
+ params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'],
+ checkIfExists: true
+ ),
+ ],
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.txt,
+ file(process.out.html.get(0).get(1)).list(),
+ ).match()
+ },
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/falco/tests/main.nf.test.snap b/modules/nf-core/falco/tests/main.nf.test.snap
new file mode 100644
index 00000000..34ac64e3
--- /dev/null
+++ b/modules/nf-core/falco/tests/main.nf.test.snap
@@ -0,0 +1,61 @@
+{
+ "sarscov2 - fastq - single end": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ [
+ "test_fastqc_data.txt:md5,36d989bb9e2d5a632e19452f4e6c2a4e",
+ "test_summary.txt:md5,a925aec214a83d2f6252847166f2ef3a"
+ ]
+ ]
+ ],
+ null
+ ],
+ "timestamp": "2024-02-02T16:28:17.756764"
+ },
+ "sarscov2 - fastq - paired end": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.fastq.gz_fastqc_data.txt:md5,36d989bb9e2d5a632e19452f4e6c2a4e",
+ "test_1.fastq.gz_summary.txt:md5,a925aec214a83d2f6252847166f2ef3a",
+ "test_2.fastq.gz_fastqc_data.txt:md5,ad5c45dfc8f79754dd5d8029456b715b",
+ "test_2.fastq.gz_summary.txt:md5,d0cb642adefb5635a25e808f1f38780a"
+ ]
+ ]
+ ],
+ [
+ "test_1.fastq.gz_fastqc_report.html",
+ "test_2.fastq.gz_fastqc_report.html"
+ ]
+ ],
+ "timestamp": "2024-02-02T16:22:11.757473"
+ },
+ "sarscov2 - fastq - interleaved": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_fastqc_data.txt:md5,b5e593f140fe578bdd25ceb84e98fd37",
+ "test_summary.txt:md5,ca52f458b1223d89db69e2d5e73cf867"
+ ]
+ ]
+ ],
+ null
+ ],
+ "timestamp": "2024-02-02T16:28:36.035899"
+ }
+}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 6d2802eb..3bc525fb 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -7,6 +7,7 @@ include { samplesheetToList } from 'plugin/nf-schema'
*/
// Modules
+include { FALCO } from '../modules/nf-core/falcon/main'
include { FASTP } from '../modules/nf-core/fastp/main'
include { MD5SUM } from '../modules/nf-core/md5sum/main'
include { MOSDEPTH } from '../modules/nf-core/mosdepth/main'
@@ -202,6 +203,14 @@ workflow PREPROCESSING {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
+ // MODULE: FALCO
+ // Run FALCO for "unsupported" fastq QC
+ // FALCO([meta, fastq])
+ FALCO(ch_fastq_per_sample.other, false)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
+ ch_versions = ch_versions.mix(FALCO.out.versions.first())
+
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
@@ -485,6 +494,8 @@ workflow PREPROCESSING {
demultiplex_reports = BCL_DEMULTIPLEX.out.reports
demultiplex_logs = BCL_DEMULTIPLEX.out.logs
demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
+ falco_html = FALCO.out.html
+ falco_txt = FALCO.out.txt
fastp_json = FASTP.out.json
fastp_html = FASTP.out.html
crams = FASTQ_TO_CRAM.out.cram_crai
From 4ed927795877c6302c0b9dc2de1b07f4261345c4 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 08:45:02 +0100
Subject: [PATCH 166/228] fix typo + linting
---
main.nf | 456 ++++++++++++++++++++++---------------
workflows/preprocessing.nf | 208 ++++++++---------
2 files changed, 375 insertions(+), 289 deletions(-)
diff --git a/main.nf b/main.nf
index 6b0e25f3..412538d8 100644
--- a/main.nf
+++ b/main.nf
@@ -64,195 +64,277 @@ workflow {
)
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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
- falco_html = PREPROCESSING.out.falco_html
- falco_txt = PREPROCESSING.out.falco_txt
- fastp_json = PREPROCESSING.out.fastp_json
- fastp_html = PREPROCESSING.out.fastp_html
- crams = PREPROCESSING.out.crams
- rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
- rna_junctions = PREPROCESSING.out.rna_junctions
- align_reports = PREPROCESSING.out.align_reports
- sormadup_metrics = PREPROCESSING.out.sormadup_metrics
- mosdepth_global = PREPROCESSING.out.mosdepth_global
- mosdepth_summary = PREPROCESSING.out.mosdepth_summary
- mosdepth_regions = PREPROCESSING.out.mosdepth_regions
- mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
- mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
- mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
- mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
- mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
- mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
- mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
- samtools_coverage = PREPROCESSING.out.samtools_coverage
- panelcoverage = PREPROCESSING.out.panelcoverage
- samtools_stats = PREPROCESSING.out.samtools_stats
- samtools_flagstat = PREPROCESSING.out.samtools_flagstat
- samtools_idxstats = PREPROCESSING.out.samtools_idxstats
- picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
+ 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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
+ falco_html = PREPROCESSING.out.falco_html
+ falco_txt = PREPROCESSING.out.falco_txt
+ fastp_json = PREPROCESSING.out.fastp_json
+ fastp_html = PREPROCESSING.out.fastp_html
+ crams = PREPROCESSING.out.crams
+ rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
+ rna_junctions = PREPROCESSING.out.rna_junctions
+ align_reports = PREPROCESSING.out.align_reports
+ sormadup_metrics = PREPROCESSING.out.sormadup_metrics
+ mosdepth_global = PREPROCESSING.out.mosdepth_global
+ mosdepth_summary = PREPROCESSING.out.mosdepth_summary
+ mosdepth_regions = PREPROCESSING.out.mosdepth_regions
+ mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
+ mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
+ samtools_coverage = PREPROCESSING.out.samtools_coverage
+ panelcoverage = PREPROCESSING.out.panelcoverage
+ samtools_stats = PREPROCESSING.out.samtools_stats
+ samtools_flagstat = PREPROCESSING.out.samtools_flagstat
+ samtools_idxstats = PREPROCESSING.out.samtools_idxstats
+ picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
picard_multiplemetrics_pdf = PREPROCESSING.out.picard_multiplemetrics_pdf
- 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
+ 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
}
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
- } }
- demultiplex_logs { path { meta, log ->
- def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
- log >> out_path
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- mosdepth_global { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_summary { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_d4 { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_quantized_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_quantized_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_thresholds_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_thresholds_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_coverage { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- panelcoverage { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_stats { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_flagstat { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_idxstats { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_multiplemetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_multiplemetrics_pdf { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_wgsmetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_hsmetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- md5sums { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- multiqc_main_report { path "multiqc/" }
- multiqc_main_data { path "multiqc/" }
- multiqc_main_plots { path "multiqc/" }
- multiqc_library_report { path "multiqc/" }
- multiqc_library_data { path "multiqc/" }
- multiqc_library_plots { path "multiqc/" }
+ 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
+ }
+ }
+ demultiplex_logs {
+ path { meta, log ->
+ def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
+ log >> out_path
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ mosdepth_global {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_summary {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_d4 {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_quantized_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_quantized_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_thresholds_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_thresholds_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_coverage {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ panelcoverage {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_stats {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_flagstat {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_idxstats {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_multiplemetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_multiplemetrics_pdf {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_wgsmetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_hsmetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ md5sums {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ multiqc_main_report {
+ path "multiqc/"
+ }
+ multiqc_main_data {
+ path "multiqc/"
+ }
+ multiqc_main_plots {
+ path "multiqc/"
+ }
+ multiqc_library_report {
+ path "multiqc/"
+ }
+ multiqc_library_data {
+ path "multiqc/"
+ }
+ multiqc_library_plots {
+ path "multiqc/"
+ }
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 3bc525fb..e76ee226 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,26 @@ include { samplesheetToList } from 'plugin/nf-schema'
*/
// Modules
-include { FALCO } from '../modules/nf-core/falcon/main'
-include { FASTP } from '../modules/nf-core/fastp/main'
-include { MD5SUM } from '../modules/nf-core/md5sum/main'
-include { MOSDEPTH } from '../modules/nf-core/mosdepth/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 { FALCO } from '../modules/nf-core/falco/main'
+include { FASTP } from '../modules/nf-core/fastp/main'
+include { MD5SUM } from '../modules/nf-core/md5sum/main'
+include { MOSDEPTH } from '../modules/nf-core/mosdepth/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'
// Subworkflows
-include { BAM_QC } from '../subworkflows/local/bam_qc/main'
-include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/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/main'
+include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
+include { COVERAGE } from '../subworkflows/local/coverage/main'
+include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
// Functions
-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 { 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'
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -37,10 +37,10 @@ include { getGenomeAttribute } from '../subworkflows/local/utils_nfco
workflow PREPROCESSING {
take:
ch_samplesheet // channel: samplesheet read in from --input
- genomes // map: genome reference files
- markdup // string: markdup method to use
- roi // file: regions of interest bed file to be applied to all samples
- genelists // file: directory containing genelist bed files for coverage analysis
+ genomes // map: genome reference files
+ markdup // string: markdup method to use
+ roi // file: regions of interest bed file to be applied to all samples
+ genelists // file: directory containing genelist bed files for coverage analysis
main:
ch_versions = channel.empty()
@@ -79,7 +79,7 @@ workflow PREPROCESSING {
BCL_DEMULTIPLEX.out.fastq.dump(tag: "DEMULTIPLEX: fastq", pretty: true)
ch_multiqc_files = ch_multiqc_files.mix(
BCL_DEMULTIPLEX.out.reports,
- BCL_DEMULTIPLEX.out.stats
+ BCL_DEMULTIPLEX.out.stats,
)
ch_versions = ch_versions.mix(BCL_DEMULTIPLEX.out.versions)
@@ -197,7 +197,7 @@ workflow PREPROCESSING {
ch_fastq_per_sample.supported.dump(tag: "Supported FASTQ per sample", pretty: true)
ch_fastq_per_sample.other.dump(tag: "Other FASTQ per sample", pretty: true)
-/*
+ /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// FASTQ TRIMMING AND QC
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -206,15 +206,17 @@ workflow PREPROCESSING {
// MODULE: FALCO
// Run FALCO for "unsupported" fastq QC
// FALCO([meta, fastq])
- FALCO(ch_fastq_per_sample.other, false)
- ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
- ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
- ch_versions = ch_versions.mix(FALCO.out.versions.first())
+ FALCO(ch_fastq_per_sample.other)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
+ ch_versions = ch_versions.mix(FALCO.out.versions.first())
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
- FASTP(ch_fastq_per_sample.supported.map{ meta, fastq -> return [meta, fastq, []] }, false, false, false)
+ FASTP(ch_fastq_per_sample.supported.map { meta, fastq ->
+ return [meta, fastq, []]
+ }, false, false, false)
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
ch_versions = ch_versions.mix(FASTP.out.versions.first())
@@ -239,22 +241,23 @@ workflow PREPROCESSING {
ch_trimmed_reads.dump(tag: "Supported trimmed reads per sample", pretty: true)
-/*
+ /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: FASTQ TO ALIGNED CRAM CONVERSION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
- ch_trimmed_reads.map { meta, reads ->
- return [
- meta,
- reads,
- meta.aligner,
- getGenomeAttribute(meta.genome_data, meta.aligner),
- getGenomeAttribute(meta.genome_data, "fasta"),
- getGenomeAttribute(meta.genome_data, "gtf"),
- ]
- }
- .set { ch_meta_reads_aligner_index_fasta_gtf }
+ ch_trimmed_reads
+ .map { meta, reads ->
+ return [
+ meta,
+ reads,
+ meta.aligner,
+ getGenomeAttribute(meta.genome_data, meta.aligner),
+ getGenomeAttribute(meta.genome_data, "fasta"),
+ getGenomeAttribute(meta.genome_data, "gtf"),
+ ]
+ }
+ .set { ch_meta_reads_aligner_index_fasta_gtf }
FASTQ_TO_CRAM(
ch_meta_reads_aligner_index_fasta_gtf,
@@ -414,7 +417,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
@@ -423,9 +426,9 @@ workflow PREPROCESSING {
def topic_versions_string = topic_versions.versions_tuple
.map { process, tool, version ->
- [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
+ [process[process.lastIndexOf(':') + 1..-1], " ${tool}: ${version}"]
}
- .groupTuple(by:0)
+ .groupTuple(by: 0)
.map { process, tool_versions ->
tool_versions.unique().sort()
"${process}:\n${tool_versions.join('\n')}"
@@ -437,42 +440,43 @@ workflow PREPROCESSING {
storeDir: "${params.outdir}/pipeline_info",
name: 'nf_cmgg_preprocessing_software_mqc_versions.yml',
sort: true,
- newLine: true
+ newLine: true,
)
- .map { file -> [[id: 'main'], file] } // add meta for multiqc
+ .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_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()
+ ch_multiqc_logo = params.multiqc_logo ? channel.fromPath(params.multiqc_logo, checkIfExists: true) : channel.empty()
- summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
+ 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_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml').map { file -> [[id: 'main'], file] })
- 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_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_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.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: true).map { file -> [[id: 'main'], file] })
- ch_multiqc_files = ch_multiqc_files.map { meta, files ->
- return [meta.library ? [id: meta.library] : [id: 'main'], files]
- }
- .branch { meta, files ->
- main: meta.id == 'main'
+ ch_multiqc_files = ch_multiqc_files
+ .map { meta, files ->
+ return [meta.library ? [id: meta.library] : [id: 'main'], files]
+ }
+ .branch { meta, files ->
+ main: meta.id == 'main'
return files
- library: meta.id != 'main'
+ library: meta.id != 'main'
return [meta, files instanceof List ? files : [files]]
- }
+ }
ch_multiqc_files.main.dump(tag: "MULTIQC files - main", pretty: true)
ch_multiqc_files.library.dump(tag: "MULTIQC files - library", pretty: true)
MULTIQC_MAIN(
- ch_multiqc_files.main.collect().map{ files -> [[id: 'main'], files] },
+ ch_multiqc_files.main.collect().map { files -> [[id: 'main'], files] },
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -481,7 +485,7 @@ workflow PREPROCESSING {
)
MULTIQC_LIBRARY(
- ch_multiqc_files.library.transpose(by:1).groupTuple(),
+ ch_multiqc_files.library.transpose(by: 1).groupTuple(),
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -490,48 +494,48 @@ workflow PREPROCESSING {
)
emit:
- demultiplex_interop = BCL_DEMULTIPLEX.out.interop
- demultiplex_reports = BCL_DEMULTIPLEX.out.reports
- demultiplex_logs = BCL_DEMULTIPLEX.out.logs
- demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
- falco_html = FALCO.out.html
- falco_txt = FALCO.out.txt
- fastp_json = FASTP.out.json
- fastp_html = FASTP.out.html
- crams = FASTQ_TO_CRAM.out.cram_crai
- rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
- rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
- align_reports = FASTQ_TO_CRAM.out.align_reports
- sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = mosdepth_global_out
- mosdepth_summary = mosdepth_summary_out
- mosdepth_regions = mosdepth_regions_out
- mosdepth_per_base_d4 = mosdepth_per_base_d4_out
- mosdepth_per_base_bed = mosdepth_per_base_bed_out
- mosdepth_per_base_csi = mosdepth_per_base_csi_out
- mosdepth_regions_bed = mosdepth_regions_bed_out
- mosdepth_regions_csi = mosdepth_regions_csi_out
- mosdepth_quantized_bed = mosdepth_quantized_bed_out
- mosdepth_quantized_csi = mosdepth_quantized_csi_out
- mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
- mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
- samtools_coverage = samtools_coverage_out
- panelcoverage = panelcoverage_out
- samtools_stats = BAM_QC.out.samtools_stats
- samtools_flagstat = BAM_QC.out.samtools_flagstat
- samtools_idxstats = BAM_QC.out.samtools_idxstats
- picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
- picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
- 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
- versions = ch_versions
+ demultiplex_interop = BCL_DEMULTIPLEX.out.interop
+ demultiplex_reports = BCL_DEMULTIPLEX.out.reports
+ demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
+ falco_html = FALCO.out.html
+ falco_txt = FALCO.out.txt
+ fastp_json = FASTP.out.json
+ fastp_html = FASTP.out.html
+ crams = FASTQ_TO_CRAM.out.cram_crai
+ rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
+ rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
+ align_reports = FASTQ_TO_CRAM.out.align_reports
+ sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
+ mosdepth_global = mosdepth_global_out
+ mosdepth_summary = mosdepth_summary_out
+ mosdepth_regions = mosdepth_regions_out
+ mosdepth_per_base_d4 = mosdepth_per_base_d4_out
+ mosdepth_per_base_bed = mosdepth_per_base_bed_out
+ mosdepth_per_base_csi = mosdepth_per_base_csi_out
+ mosdepth_regions_bed = mosdepth_regions_bed_out
+ mosdepth_regions_csi = mosdepth_regions_csi_out
+ mosdepth_quantized_bed = mosdepth_quantized_bed_out
+ mosdepth_quantized_csi = mosdepth_quantized_csi_out
+ mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
+ mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
+ samtools_coverage = samtools_coverage_out
+ panelcoverage = panelcoverage_out
+ samtools_stats = BAM_QC.out.samtools_stats
+ samtools_flagstat = BAM_QC.out.samtools_flagstat
+ samtools_idxstats = BAM_QC.out.samtools_idxstats
+ picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
+ picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
+ 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
+ versions = ch_versions
}
/*
From 27e1dd69a242604229c55694947adaa6cbab641d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 09:04:36 +0100
Subject: [PATCH 167/228] drop unused gh workflows
---
.github/workflows/fix-linting.yml | 89 -------------------------------
.github/workflows/fix_linting.yml | 89 -------------------------------
2 files changed, 178 deletions(-)
delete mode 100644 .github/workflows/fix-linting.yml
delete mode 100644 .github/workflows/fix_linting.yml
diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml
deleted file mode 100644
index 2230aafb..00000000
--- a/.github/workflows/fix-linting.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-name: Fix linting from a comment
-on:
- issue_comment:
- types: [created]
-
-jobs:
- fix-linting:
- # Only run if comment is on a PR with the main repo, and if it contains the magic keywords
- if: >
- contains(github.event.comment.html_url, '/pull/') &&
- contains(github.event.comment.body, '@nf-core-bot fix linting') &&
- github.repository == 'nf-cmgg/preprocessing'
- runs-on: ubuntu-latest
- steps:
- # Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- with:
- token: ${{ secrets.nf_core_bot_auth_token }}
-
- # indication that the linting is being fixed
- - name: React on comment
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: eyes
-
- # Action runs on the issue comment, so we don't get the PR by default
- # Use the gh cli to check out the PR
- - name: Checkout Pull Request
- run: gh pr checkout ${{ github.event.issue.number }}
- env:
- GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
-
- # Install and run pre-commit
- - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
- with:
- python-version: 3.11
-
- - name: Install pre-commit
- run: pip install pre-commit
-
- - name: Run pre-commit
- id: pre-commit
- run: pre-commit run --all-files
- continue-on-error: true
-
- # indication that the linting has finished
- - name: react if linting finished succesfully
- if: steps.pre-commit.outcome == 'success'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: "+1"
-
- - name: Commit & push changes
- id: commit-and-push
- if: steps.pre-commit.outcome == 'failure'
- run: |
- git config user.email "core@nf-co.re"
- git config user.name "nf-core-bot"
- git config push.default upstream
- git add .
- git status
- git commit -m "[automated] Fix code linting"
- git push
-
- - name: react if linting errors were fixed
- id: react-if-fixed
- if: steps.commit-and-push.outcome == 'success'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: hooray
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: confused
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- issue-number: ${{ github.event.issue.number }}
- body: |
- @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually.
- See [CI log](https://github.com/nf-cmgg/preprocessing/actions/runs/${{ github.run_id }}) for more details.
diff --git a/.github/workflows/fix_linting.yml b/.github/workflows/fix_linting.yml
deleted file mode 100644
index 63b82243..00000000
--- a/.github/workflows/fix_linting.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-name: Fix linting from a comment
-on:
- issue_comment:
- types: [created]
-
-jobs:
- fix-linting:
- # Only run if comment is on a PR with the main repo, and if it contains the magic keywords
- if: >
- contains(github.event.comment.html_url, '/pull/') &&
- contains(github.event.comment.body, '@nf-core-bot fix linting') &&
- github.repository == 'nf-cmgg/preprocessing'
- runs-on: ubuntu-latest
- steps:
- # Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- with:
- token: ${{ secrets.nf_core_bot_auth_token }}
-
- # indication that the linting is being fixed
- - name: React on comment
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: eyes
-
- # Action runs on the issue comment, so we don't get the PR by default
- # Use the gh cli to check out the PR
- - name: Checkout Pull Request
- run: gh pr checkout ${{ github.event.issue.number }}
- env:
- GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
-
- # Install and run pre-commit
- - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
- with:
- python-version: "3.14"
-
- - name: Install pre-commit
- run: pip install pre-commit
-
- - name: Run pre-commit
- id: pre-commit
- run: pre-commit run --all-files
- continue-on-error: true
-
- # indication that the linting has finished
- - name: react if linting finished succesfully
- if: steps.pre-commit.outcome == 'success'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: "+1"
-
- - name: Commit & push changes
- id: commit-and-push
- if: steps.pre-commit.outcome == 'failure'
- run: |
- git config user.email "core@nf-co.re"
- git config user.name "nf-core-bot"
- git config push.default upstream
- git add .
- git status
- git commit -m "[automated] Fix code linting"
- git push
-
- - name: react if linting errors were fixed
- id: react-if-fixed
- if: steps.commit-and-push.outcome == 'success'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: hooray
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: confused
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- issue-number: ${{ github.event.issue.number }}
- body: |
- @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually.
- See [CI log](https://github.com/nf-cmgg/preprocessing/actions/runs/${{ github.run_id }}) for more details.
From 9ebb533815b3826902d3d1f9c19f3bb762f4c1bc Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 09:04:57 +0100
Subject: [PATCH 168/228] calculate checksums for fastq output
---
workflows/preprocessing.nf | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index e76ee226..12d4b8b2 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -214,9 +214,14 @@ workflow PREPROCESSING {
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
- FASTP(ch_fastq_per_sample.supported.map { meta, fastq ->
- return [meta, fastq, []]
- }, false, false, false)
+ FASTP(
+ ch_fastq_per_sample.supported.map { meta, fastq ->
+ return [meta, fastq, []]
+ },
+ false,
+ false,
+ false,
+ )
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
ch_versions = ch_versions.mix(FASTP.out.versions.first())
@@ -402,9 +407,11 @@ workflow PREPROCESSING {
*/
MD5SUM(
- FASTQ_TO_CRAM.out.cram_crai.map { meta, cram, _crai ->
- return [meta, cram]
- },
+ ch_fastq_per_sample.other.mix(
+ FASTQ_TO_CRAM.out.cram_crai.map { meta, cram, _crai ->
+ return [meta, cram]
+ }
+ ),
false,
)
ch_versions = ch_versions.mix(MD5SUM.out.versions.first())
From e5bd5487129a9a1315e70fae760d529e041e56d9 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 10:03:53 +0100
Subject: [PATCH 169/228] nextflow config lint
---
nextflow.config | 272 +++++++++++++++++++------------------------
nextflow_schema.json | 51 --------
2 files changed, 121 insertions(+), 202 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 2beb9d9e..c6205a67 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -10,33 +10,33 @@
params {
// Input options
- input = null
+ input = null
// References
- genome = null
- igenomes_base = '/references/'
- igenomes_ignore = false
+ genome = null
+ igenomes_base = '/references/'
+ igenomes_ignore = false
// Analysis options
- markdup = 'bamsormadup'
- umi_aware = false
- skip_trimming = false
- split_fastq = 100000000
- trim_front = 0
- trim_tail = 0
- adapter_R1 = null
- adapter_R2 = null
- run_coverage = true
- disable_picard_metrics = false
- roi = null
- genelists = null
+ markdup = 'bamsormadup'
+ umi_aware = false
+ skip_trimming = false
+ split_fastq = 100000000
+ trim_front = 0
+ trim_tail = 0
+ adapter_R1 = null
+ adapter_R2 = null
+ run_coverage = true
+ disable_picard_metrics = false
+ roi = null
+ genelists = null
// MultiQC options
- multiqc_config = null
- multiqc_title = null
- multiqc_logo = null
- max_multiqc_email_size = '25.MB'
- multiqc_methods_description = null
+ multiqc_config = null
+ multiqc_title = null
+ multiqc_logo = null
+ max_multiqc_email_size = '25.MB'
+ multiqc_methods_description = null
// Boilerplate options
outdir = null
@@ -51,28 +51,19 @@ params {
show_hidden = false
version = false
pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
- trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')
+ trace_report_suffix = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')
// Config options
- config_profile_name = null
- config_profile_description = null
+ config_profile_name = null
+ config_profile_description = null
- custom_config_version = 'master'
- custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
- config_profile_contact = null
- config_profile_url = null
-
- // CMGG Config options
- cmgg_config_profile_name = null
- cmgg_config_profile_description = null
-
- cmgg_custom_config_version = 'main'
- cmgg_custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.cmgg_custom_config_version}"
- cmgg_config_profile_contact = null
- cmgg_config_profile_url = null
+ custom_config_version = 'main'
+ custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.custom_config_version}"
+ config_profile_contact = null
+ config_profile_url = null
// Schema validation default options
- validate_params = true
+ validate_params = true
}
// Load base.config by default for all pipelines
@@ -83,40 +74,40 @@ includeConfig !params.igenomes_ignore ? 'conf/igenomes.config' : 'conf/igenomes_
profiles {
debug {
- dumpHashes = true
- process.beforeScript = 'echo $HOSTNAME'
- cleanup = false
+ dumpHashes = true
+ process.beforeScript = 'echo $HOSTNAME'
+ 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
+ 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
+ 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
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
- docker.runOptions = '-u $(id -u):$(id -g)'
+ docker.enabled = true
+ conda.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
+ docker.runOptions = '-u $(id -u):$(id -g)'
}
arm64 {
process.arch = 'arm64'
@@ -130,54 +121,54 @@ profiles {
wave.strategy = 'conda,container'
}
emulate_amd64 {
- docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
+ docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
}
singularity {
- singularity.enabled = true
- singularity.autoMounts = true
- conda.enabled = false
- docker.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ singularity.enabled = true
+ singularity.autoMounts = true
+ conda.enabled = false
+ docker.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
podman {
- podman.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ podman.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
shifter {
- shifter.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ shifter.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
charliecloud {
- charliecloud.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- apptainer.enabled = false
+ charliecloud.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ apptainer.enabled = false
}
apptainer {
- apptainer.enabled = true
- apptainer.autoMounts = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
+ apptainer.enabled = true
+ apptainer.autoMounts = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
}
wave {
apptainer.ociAutoPull = true
@@ -187,12 +178,16 @@ profiles {
wave.strategy = 'conda,container'
}
gpu {
- docker.runOptions = '-u $(id -u):$(id -g) --gpus all'
- apptainer.runOptions = '--nv'
- singularity.runOptions = '--nv'
+ docker.runOptions = '-u $(id -u):$(id -g) --gpus all'
+ apptainer.runOptions = '--nv'
+ singularity.runOptions = '--nv'
+ }
+ test {
+ includeConfig 'conf/test.config'
+ }
+ test_full {
+ includeConfig 'conf/test_full.config'
}
- test { includeConfig 'conf/test.config' }
- test_full { includeConfig 'conf/test_full.config' }
}
// Load nf-core custom profiles from different institutions
@@ -203,19 +198,15 @@ includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !pa
// Load nf-cmgg/preprocessing custom profiles from different institutions.
-// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs
-// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
-
-// Load nf-cmgg/preprocessing custom profiles from nf-cmgg/configs.
-includeConfig params.cmgg_custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.cmgg_custom_config_base.startsWith('http')) ? "${params.cmgg_custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
+includeConfig params.custom_config_base && params.custom_config_base.contains('nf-cmgg') && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile
// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled
// Set to your registry if you have a mirror of containers
-apptainer.registry = 'quay.io'
-docker.registry = 'quay.io'
-podman.registry = 'quay.io'
-singularity.registry = 'quay.io'
+apptainer.registry = 'quay.io'
+docker.registry = 'quay.io'
+podman.registry = 'quay.io'
+singularity.registry = 'quay.io'
charliecloud.registry = 'quay.io'
// Export these variables to prevent local Python/R libraries from conflicting with those in the container
@@ -230,58 +221,37 @@ env {
}
// Set bash options
-process.shell = [
- "bash",
- "-C", // No clobber - prevent output redirection from overwriting files.
- "-e", // Exit if a tool returns a non-zero status/exit code
- "-u", // Treat unset variables and parameters as an error
- "-o", // Returns the status of the last command to exit..
- "pipefail" // ..with a non-zero status or zero if all successfully execute
-]
+process.shell = ["bash", "-C", "-e", "-u", "-o", "pipefail"]
// Disable process selector warnings by default. Use debug profile to enable warnings.
nextflow.enable.configProcessNamesValidation = false
timeline {
- enabled = true
+ enabled = true
overwrite = true
- file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html"
+ file = "${params.outdir}/pipeline_info/execution_timeline_${params.trace_report_suffix}.html"
}
report {
- enabled = true
+ enabled = true
overwrite = true
- file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html"
+ file = "${params.outdir}/pipeline_info/execution_report_${params.trace_report_suffix}.html"
}
trace {
- enabled = true
+ enabled = true
overwrite = true
- file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt"
+ file = "${params.outdir}/pipeline_info/execution_trace_${params.trace_report_suffix}.txt"
}
dag {
- enabled = true
+ 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}.html"
}
manifest {
name = 'nf-cmgg/preprocessing'
contributors = [
- [
- name: 'Matthias De Smet',
- affiliation: 'Center for Medical Genetics Ghent, Ghent University, Belgium',
- email: 'matthias.desmet@ugent.be',
- github: '@matthdsm',
- contribution: ["author","maintainer"], // List of contribution types ('author', 'maintainer' or 'contributor')
- orcid: 'https://orcid.org/0000-0003-2555-3114'
- ],
- [
- name: ' Nicolas Vannieuwkerke',
- affiliation: 'Center for Medical Genetics Ghent, Ghent University Hospital, Belgium',
- email: 'nicolas.vannieuwkerke@ugent.be',
- github: '@nvnieuwk',
- contribution: ["maintainer"], // List of contribution types ('author', 'maintainer' or 'contributor')
- orcid: 'https://orcid.org/0009-0003-5619-1555'
- ],
+ [name: 'Matthias De Smet', affiliation: 'Center for Medical Genetics Ghent, Ghent University, Belgium', email: 'matthias.desmet@ugent.be', github: '@matthdsm', contribution: ["author", "maintainer"], orcid: 'https://orcid.org/0000-0003-2555-3114'],
+ [name: ' Nicolas Vannieuwkerke', affiliation: 'Center for Medical Genetics Ghent, Ghent University Hospital, Belgium', email: 'nicolas.vannieuwkerke@ugent.be', github: '@nvnieuwk', contribution: ["maintainer"], orcid: 'https://orcid.org/0009-0003-5619-1555'],
]
homePage = 'https://github.com/nf-cmgg/preprocessing'
description = """Demultiplexing, adapter trimming, alignment, and coverage calculation for NGS data."""
@@ -294,12 +264,12 @@ manifest {
// Nextflow plugins
plugins {
- id 'nf-schema@2.6.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet
+ id 'nf-schema@2.6.1'
}
validation {
defaultIgnoreParams = ["genomes"]
- monochromeLogs = params.monochrome_logs
+ monochromeLogs = params.monochrome_logs
}
// Load modules.config for DSL2 module specific options
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 63d39f34..19a00a3f 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -174,54 +174,6 @@
}
}
},
- "cmgg_institutional_config_options": {
- "title": "nf-cmgg config options",
- "type": "object",
- "fa_icon": "fas fa-university",
- "description": "Parameters used to describe centralised config profiles. These should not be edited.",
- "help_text": "The centralised nf-cmgg configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.",
- "properties": {
- "cmgg_custom_config_version": {
- "type": "string",
- "description": "Git commit id for nf-cmgg configs.",
- "default": "master",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_custom_config_base": {
- "type": "string",
- "description": "Base directory for nf-cmgg configs.",
- "default": "https://raw.githubusercontent.com/nf-cmgg/configs/master",
- "hidden": true,
- "help_text": "If 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.",
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_name": {
- "type": "string",
- "description": "nf-cmgg config name.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_description": {
- "type": "string",
- "description": "nf-cmgg config description.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_contact": {
- "type": "string",
- "description": "nf-cmgg config contact information.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_url": {
- "type": "string",
- "description": "nf-cmgg config URL link.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- }
- }
- },
"generic_options": {
"title": "Generic options",
"type": "object",
@@ -363,9 +315,6 @@
{
"$ref": "#/$defs/institutional_config_options"
},
- {
- "$ref": "#/$defs/cmgg_institutional_config_options"
- },
{
"$ref": "#/$defs/generic_options"
}
From 78e0750ad6dcf296a76c297e4b0f10166c130a72 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 11:49:18 +0100
Subject: [PATCH 170/228] fix tests
---
conf/modules.config | 3 ++
.../nf-core/picard/collecthsmetrics/main.nf | 5 +--
.../picard/collectmultiplemetrics/main.nf | 2 ++
.../nf-core/picard/collectwgsmetrics/main.nf | 2 ++
subworkflows/local/coverage/main.nf | 10 +++---
tests/config/igenomes_test.config | 1 +
.../local/fastq_align_rna/main.nf.test.snap | 2 +-
.../fastq_to_aligned_cram/main.nf.test.snap | 32 +++++++++----------
8 files changed, 32 insertions(+), 25 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 36734a8a..07ea1623 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -305,4 +305,7 @@ env {
MOSDEPTH_Q0 = 'NO_COVERAGE'
MOSDEPTH_Q1 = 'LOW_COVERAGE'
MOSDEPTH_Q2 = 'CALLABLE'
+
+ // Set TMPDIR for all modules
+ TMPDIR = "$PWD"
}
diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf
index a1dc56d8..914ae62c 100644
--- a/modules/nf-core/picard/collecthsmetrics/main.nf
+++ b/modules/nf-core/picard/collecthsmetrics/main.nf
@@ -45,6 +45,7 @@ process PICARD_COLLECTHSMETRICS {
"""
+ export TMP=\$PWD
$bait_intervallist_cmd
$target_intervallist_cmd
@@ -57,8 +58,8 @@ process PICARD_COLLECTHSMETRICS {
--BAIT_INTERVALS $bait_interval_list \\
--TARGET_INTERVALS $target_interval_list \\
--INPUT $bam \\
- --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics
-
+ --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics \\
+ --TMP_DIR .
cat <<-END_VERSIONS > versions.yml
"${task.process}":
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index e4d74998..b1a45737 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -29,12 +29,14 @@ process PICARD_COLLECTMULTIPLEMETRICS {
avail_mem = (task.memory.mega*0.8).intValue()
}
"""
+ export TMP=\$PWD
picard \\
-Xmx${avail_mem}M \\
CollectMultipleMetrics \\
$args \\
--INPUT $bam \\
--OUTPUT ${prefix}.CollectMultipleMetrics \\
+ --TMP_DIR . \\
$reference
cat <<-END_VERSIONS > versions.yml
diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf
index cd4a7711..bd8d5b5f 100644
--- a/modules/nf-core/picard/collectwgsmetrics/main.nf
+++ b/modules/nf-core/picard/collectwgsmetrics/main.nf
@@ -29,6 +29,7 @@ process PICARD_COLLECTWGSMETRICS {
avail_mem = (task.memory.mega*0.8).intValue()
}
"""
+ export TMP=\$PWD
picard \\
-Xmx${avail_mem}M \\
CollectWgsMetrics \\
@@ -36,6 +37,7 @@ process PICARD_COLLECTWGSMETRICS {
--INPUT $bam \\
--OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\
--REFERENCE_SEQUENCE ${fasta} \\
+ --TMP_DIR . \\
$interval
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 27a19c43..58e76db6 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -34,13 +34,11 @@ workflow COVERAGE {
PANELCOVERAGE(
MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
- if (genelists !instanceof List) {
- // Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
- genelists = [genelists]
- }
+ // Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
+ def genelists_array = genelists !instanceof List ? [genelists] : genelists
def filtered_genelists = meta.tag.toLowerCase() == "seqcap"
- ? genelists.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
- : genelists.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
+ ? genelists_array.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
+ : genelists_array.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
if (filtered_genelists.size() > 0) {
return [
diff --git a/tests/config/igenomes_test.config b/tests/config/igenomes_test.config
index 80984075..74154eec 100644
--- a/tests/config/igenomes_test.config
+++ b/tests/config/igenomes_test.config
@@ -9,6 +9,7 @@ params {
gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
}
}
+ genelists = null
}
aws {
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index 2cd3d63c..cf11ffe9 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -119,4 +119,4 @@
},
"timestamp": "2024-05-28T16:17:08.089796673"
}
-}
+}
\ No newline at end of file
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index aabf04cd..1714e2fb 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -25,13 +25,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
],
"versions": [
"versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
@@ -49,7 +49,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -71,10 +71,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -112,7 +112,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -134,10 +134,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -174,7 +174,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -269,7 +269,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -291,13 +291,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
],
"versions": [
"versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
@@ -311,4 +311,4 @@
},
"timestamp": "2025-12-17T14:51:22.925873858"
}
-}
+}
\ No newline at end of file
From d5e139208c0a63affa44e149513e8921266c96ed Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 11:50:33 +0100
Subject: [PATCH 171/228] module patches
---
.../picard-collecthsmetrics.diff | 18 +++++++++++++++++-
.../picard-collectmultiplemetrics.diff | 15 +++++++++++++++
.../picard-collectwgsmetrics.diff | 16 ++++++++++++++++
3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
index 5907d093..1407a35a 100644
--- a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
+++ b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
@@ -26,7 +26,7 @@ Changes in 'picard/collecthsmetrics/main.nf':
def avail_mem = 3072
if (!task.memory) {
-@@ -37,14 +33,14 @@
+@@ -37,18 +33,19 @@
def bait_intervallist_cmd = ""
if (bait_intervals =~ /.(bed|bed.gz)$/){
bait_interval_list = bait_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list")
@@ -43,6 +43,22 @@ Changes in 'picard/collecthsmetrics/main.nf':
}
+ """
++ export TMP=\$PWD
+
+ $bait_intervallist_cmd
+ $target_intervallist_cmd
+@@ -61,8 +58,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 .
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap' is unchanged
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test' is unchanged
diff --git a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
index 489076fb..d4fbba56 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
+++ b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
@@ -15,6 +15,21 @@ Changes in 'picard/collectmultiplemetrics/main.nf':
output:
tuple val(meta), path("*_metrics"), emit: metrics
+@@ -31,12 +29,14 @@
+ avail_mem = (task.memory.mega*0.8).intValue()
+ }
+ """
++ export TMP=\$PWD
+ picard \\
+ -Xmx${avail_mem}M \\
+ CollectMultipleMetrics \\
+ $args \\
+ --INPUT $bam \\
+ --OUTPUT ${prefix}.CollectMultipleMetrics \\
++ --TMP_DIR . \\
+ $reference
+
+ cat <<-END_VERSIONS > versions.yml
'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/collectwgsmetrics/picard-collectwgsmetrics.diff b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
index bf843c60..04fea62a 100644
--- a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
+++ b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
@@ -15,6 +15,22 @@ Changes in 'picard/collectwgsmetrics/main.nf':
path intervallist
output:
+@@ -31,6 +29,7 @@
+ avail_mem = (task.memory.mega*0.8).intValue()
+ }
+ """
++ export TMP=\$PWD
+ picard \\
+ -Xmx${avail_mem}M \\
+ CollectWgsMetrics \\
+@@ -38,6 +37,7 @@
+ --INPUT $bam \\
+ --OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\
+ --REFERENCE_SEQUENCE ${fasta} \\
++ --TMP_DIR . \\
+ $interval
+
+
'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap' is unchanged
'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test' is unchanged
From 35dec2c82d66e17b3306235364d9469d435064c9 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 12:26:28 +0100
Subject: [PATCH 172/228] fix snapshot
---
tests/workflows/preprocessing.nf.test.snap | 36 ++++++++++++++++------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 0bdfd83c..d40bc343 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -44,6 +44,12 @@
],
"demultiplex_reports": [
+ ],
+ "falco_html": [
+
+ ],
+ "falco_txt": [
+
],
"fastp_html": [
[
@@ -394,7 +400,7 @@
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -670,9 +676,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-23T13:59:59.404732"
+ "timestamp": "2026-02-11T12:00:40.443933"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -719,6 +725,12 @@
],
"demultiplex_reports": [
+ ],
+ "falco_html": [
+
+ ],
+ "falco_txt": [
+
],
"fastp_html": [
[
@@ -853,7 +865,7 @@
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -1019,9 +1031,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-23T14:06:35.503463"
+ "timestamp": "2026-02-11T12:11:20.398961"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1067,6 +1079,12 @@
],
"demultiplex_reports": [
+ ],
+ "falco_html": [
+
+ ],
+ "falco_txt": [
+
],
"fastp_html": [
[
@@ -1336,7 +1354,7 @@
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -1604,8 +1622,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-23T14:04:00.643521"
+ "timestamp": "2026-02-11T12:06:12.331519"
}
}
\ No newline at end of file
From 78b9e050f7bd558e08cb76359a5e2a80099fe943 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 14:08:18 +0100
Subject: [PATCH 173/228] fix coverage issues
---
conf/base.config | 38 ++++----
conf/modules.config | 66 +++++++-------
conf/test_full.config | 4 +-
nf-test.config | 12 +--
subworkflows/local/bam_qc/main.nf | 18 ++--
subworkflows/local/coverage/main.nf | 17 ++--
subworkflows/local/fastq_align_rna/main.nf | 19 ++--
.../local/fastq_to_aligned_cram/main.nf | 14 +--
.../main.nf | 87 ++++++++-----------
tests/config/igenomes_test.config | 14 +--
.../subworkflows/local/coverage/main.nf.test | 10 +--
.../local/coverage/main.nf.test.snap | 38 ++++++--
workflows/preprocessing.nf | 3 +-
13 files changed, 174 insertions(+), 166 deletions(-)
diff --git a/conf/base.config b/conf/base.config
index ff798214..ac353851 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -10,41 +10,41 @@
process {
- cpus = { 1 * task.attempt }
- memory = { 8.GB * task.attempt }
- time = { 4.h * task.attempt }
+ cpus = { 1 * task.attempt }
+ memory = { 8.GB * task.attempt }
+ time = { 4.h * task.attempt }
errorStrategy = { task.exitStatus in ((130..145) + 104 + 175 + 50001 + 50002 + 50003 + 50004 + 50005 + 50006) ? 'retry' : 'finish' }
maxRetries = 3
maxErrors = '-1'
// Process-specific resource requirements
- withLabel:process_single {
- cpus = { 1 }
+ withLabel: process_single {
+ cpus = { 1 }
memory = { 8.GB * task.attempt }
- time = { 4.h * task.attempt }
+ time = { 4.h * task.attempt }
}
- withLabel:process_low {
- cpus = { 2 * task.attempt }
+ withLabel: process_low {
+ cpus = { 2 * task.attempt }
memory = { 16.GB * task.attempt }
- time = { 4.h * task.attempt }
+ time = { 4.h * task.attempt }
}
- withLabel:process_medium {
- cpus = { 8 * task.attempt }
+ withLabel: process_medium {
+ cpus = { 8 * task.attempt }
memory = { 64.GB * task.attempt }
- time = { 8.h * task.attempt }
+ time = { 8.h * task.attempt }
}
- withLabel:process_high {
- cpus = { 16 * task.attempt }
+ withLabel: process_high {
+ cpus = { 16 * task.attempt }
memory = { 128.GB * task.attempt }
- time = { 16.h * task.attempt }
+ time = { 16.h * task.attempt }
}
- withLabel:process_long {
- time = { 20.h * task.attempt }
+ withLabel: process_long {
+ time = { 20.h * task.attempt }
}
- withLabel:error_ignore {
+ withLabel: error_ignore {
errorStrategy = 'ignore'
}
- withLabel:error_retry {
+ withLabel: error_retry {
errorStrategy = 'retry'
maxRetries = 2
}
diff --git a/conf/modules.config b/conf/modules.config
index 07ea1623..a284297f 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -14,9 +14,9 @@ process {
// BCL convert
withName: '.*BCL_DEMULTIPLEX:BCLCONVERT' {
- cpus = 16
- memory = { 64.GB * task.attempt }
- ext.args = {
+ cpus = 16
+ memory = { 64.GB * task.attempt }
+ ext.args = {
[
meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
"--force",
@@ -27,16 +27,16 @@ process {
// FastP
withName: '.*FASTP' {
- cpus = 4
- memory = { 4.GB * task.attempt }
- ext.args = {
+ cpus = 4
+ memory = { 4.GB * task.attempt }
+ ext.args = {
[
- params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
- params.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
- params.trim_front > 0 ? "--trim_front1 ${params.trim_front}" : "",
- params.trim_tail > 0 ? "--trim_tail1 ${params.trim_tail}" : "",
- params.adapter_R1 ? "--adapter_sequence ${params.adapter_R1}" : "",
- params.adapter_R2 ? "--adapter_sequence_r2 ${params.adapter_R2}" : "",
+ params.split_fastq > 0 ? "--split_by_lines ${params.split_fastq * 4}" : '',
+ params.skip_trimming ? "--disable_adapter_trimming" : "--detect_adapter_for_pe",
+ params.trim_front > 0 ? "--trim_front1 ${params.trim_front}" : "",
+ params.trim_tail > 0 ? "--trim_tail1 ${params.trim_tail}" : "",
+ params.adapter_R1 ? "--adapter_sequence ${params.adapter_R1}" : "",
+ params.adapter_R2 ? "--adapter_sequence_r2 ${params.adapter_R2}" : "",
"--compression 1",
].join(" ").trim()
}
@@ -57,7 +57,7 @@ process {
withName: '.*FASTQ_ALIGN_DNA:BOWTIE2_ALIGN' {
cpus = 16
memory = 32.GB
- ext.args = {
+ ext.args = {
[
"--local",
"--fast-local",
@@ -65,7 +65,7 @@ process {
meta.readgroup ? "--rg " + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join(" --rg ") : "",
].join(" ").trim()
}
- ext.args2 = "--fast"
+ ext.args2 = "--fast"
}
//// BWA mem/BWA mem2
@@ -90,9 +90,7 @@ process {
cpus = 16
memory = 32.GB
ext.args = {
- [
- meta.readgroup ? "--RGSM \"@RG\\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\\t") + "\"" : ""
- ].join(" ").trim()
+ [meta.readgroup ? "--RGSM \"@RG\\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\\t") + "\"" : ""].join(" ").trim()
}
ext.args2 = "--fast"
}
@@ -107,8 +105,8 @@ process {
//// SNAP
withName: '.*FASTQ_ALIGN_DNA:SNAPALIGNER_ALIGN' {
- cpus = 16
- memory = 64.GB
+ cpus = 16
+ memory = 64.GB
ext.args = {
[
"-b-",
@@ -125,8 +123,8 @@ process {
//// STROBEALIGN
withName: '.*FASTQ_ALIGN_DNA:STROBEALIGN' {
- cpus = 16
- memory = 32.GB
+ cpus = 16
+ memory = 32.GB
ext.args = {
[
meta.readgroup ? "--rg-id ${meta.readgroup.ID}" : "",
@@ -139,9 +137,9 @@ process {
//// STAR
withName: '.*FASTQ_ALIGN_RNA:STAR_ALIGN' {
ext.prefix = { "${meta.id}.star" }
- cpus = 16
- memory = 64.GB
- ext.args = {
+ cpus = 16
+ memory = 64.GB
+ ext.args = {
[
"--readFilesCommand gunzip -c",
"--twopassMode Basic",
@@ -222,9 +220,9 @@ process {
//// Samtools convert
withName: '.*FASTQ_TO_CRAM:SAMTOOLS_CONVERT' {
- cpus = 8
- memory = 8.GB
- ext.args = {
+ cpus = 8
+ memory = 8.GB
+ ext.args = {
[
"-C",
"--output-fmt cram,version=3.0",
@@ -247,15 +245,15 @@ process {
//// Samtools coverage
withName: '.*COVERAGE:SAMTOOLS_COVERAGE' {
- cpus = 1
- memory = 1.GB
+ cpus = 1
+ memory = 1.GB
ext.prefix = { "${meta.id}.coverage" }
}
// QC
withName: '.*BAM_QC:SAMTOOLS_.*$' {
- cpus = 1
+ cpus = 1
memory = 1.GB
}
@@ -267,15 +265,15 @@ process {
}
withName: '.*MD5SUM' {
- cpus = 1
+ cpus = 1
memory = 128.MB
}
// MultiQC
withName: '.*MULTIQC_.*$' {
container = "cmgg/multiqc_cmgg:0.0.2-multiqc-v1.33"
- cpus = 1
- memory = 4.GB
+ cpus = 1
+ memory = 4.GB
}
withName: '.*MULTIQC_MAIN' {
ext.prefix = { params.multiqc_title ? params.multiqc_title : "multiqc" }
@@ -307,5 +305,5 @@ env {
MOSDEPTH_Q2 = 'CALLABLE'
// Set TMPDIR for all modules
- TMPDIR = "$PWD"
+ TMPDIR = "\$PWD"
}
diff --git a/conf/test_full.config b/conf/test_full.config
index 6225119a..bad1c6f1 100644
--- a/conf/test_full.config
+++ b/conf/test_full.config
@@ -17,8 +17,8 @@ params {
// Input data for full size test
// TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA)
// TODO nf-core: Give any required params for the test so that command line flags are not needed
- input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv'
+ input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv'
// Genome references
- genome = 'R64-1-1'
+ genome = 'R64-1-1'
}
diff --git a/nf-test.config b/nf-test.config
index fa368ccb..c5d343b4 100644
--- a/nf-test.config
+++ b/nf-test.config
@@ -1,21 +1,21 @@
config {
// location for all nf-test tests
- testsDir "."
+ testsDir = "."
// nf-test directory including temporary files for each test
- workDir System.getenv("NFT_WORKDIR") ?: ".nf-test"
+ workDir = System.getenv("NFT_WORKDIR") ?: ".nf-test"
// location of an optional nextflow.config file specific for executing tests
- configFile "tests/nextflow.config"
+ configFile = "tests/nextflow.config"
// ignore tests coming from the nf-core/modules repo
- ignore 'modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*'
+ 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"
// 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'
+ triggers = ['nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore']
// load the necessary plugins
plugins {
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index e35555a8..1f20203d 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -11,7 +11,7 @@ include { PICARD_COLLECTWGSMETRICS } from '../../../modules/nf-core/picard/
workflow BAM_QC {
take:
ch_bam_bai_roi_fasta_fai_dict // channel: [ val(meta), path(bam), path(bai), path(roi), path(fasta), path(fai), path(dict)]
- disable_picard // boolean
+ disable_picard // boolean
main:
ch_versions = channel.empty()
@@ -72,12 +72,12 @@ workflow BAM_QC {
}
emit:
- samtools_stats = SAMTOOLS_STATS.out.stats
- samtools_flagstat = SAMTOOLS_FLAGSTAT.out.flagstat
- samtools_idxstats = SAMTOOLS_IDXSTATS.out.idxstats
- picard_multiplemetrics = ch_picard_multiplemetrics
- picard_multiplemetrics_pdf = ch_picard_multiplemetrics_pdf
- picard_wgsmetrics = ch_picard_wgsmetrics
- picard_hsmetrics = ch_picard_hsmetrics
- versions = ch_versions
+ samtools_stats = SAMTOOLS_STATS.out.stats
+ samtools_flagstat = SAMTOOLS_FLAGSTAT.out.flagstat
+ samtools_idxstats = SAMTOOLS_IDXSTATS.out.idxstats
+ picard_multiplemetrics = ch_picard_multiplemetrics
+ picard_multiplemetrics_pdf = ch_picard_multiplemetrics_pdf
+ picard_wgsmetrics = ch_picard_wgsmetrics
+ picard_hsmetrics = ch_picard_hsmetrics
+ versions = ch_versions
}
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 58e76db6..a3959d84 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -13,7 +13,6 @@ workflow COVERAGE {
main:
ch_versions = channel.empty()
- ch_coverageqc_files = channel.empty()
MOSDEPTH(
ch_meta_cram_crai_fasta_fai_roi.map { meta, cram, crai, fasta, _fai, roi ->
@@ -28,17 +27,18 @@ workflow COVERAGE {
}
)
ch_versions = ch_versions.mix(SAMTOOLS_COVERAGE.out.versions.first())
- ch_coverageqc_files = ch_coverageqc_files.merge(SAMTOOLS_COVERAGE.out.coverage)
-
- ch_genelists.view()
PANELCOVERAGE(
- MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
+ MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists)
+ .view()
+ .map { meta, bed, index, genelists ->
// Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
- def genelists_array = genelists !instanceof List ? [genelists] : genelists
+ if (genelists !instanceof List) {
+ genelists = [genelists]
+ }
def filtered_genelists = meta.tag.toLowerCase() == "seqcap"
- ? genelists_array.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
- : genelists_array.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
+ ? genelists.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
+ : genelists.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
if (filtered_genelists.size() > 0) {
return [
@@ -51,7 +51,6 @@ workflow COVERAGE {
}
)
ch_versions = ch_versions.mix(PANELCOVERAGE.out.versions.first())
- ch_coverageqc_files = ch_coverageqc_files.mix(PANELCOVERAGE.out.regiondist)
emit:
mosdepth_global = MOSDEPTH.out.global_txt
diff --git a/subworkflows/local/fastq_align_rna/main.nf b/subworkflows/local/fastq_align_rna/main.nf
index ce0d6862..1ca27833 100644
--- a/subworkflows/local/fastq_align_rna/main.nf
+++ b/subworkflows/local/fastq_align_rna/main.nf
@@ -5,9 +5,9 @@
//
-include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
-include { GNU_SORT as SORT_MERGE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
-include { GNU_SORT as SORT_MERGE_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { STAR_ALIGN } from "../../../modules/nf-core/star/align/main.nf"
+include { GNU_SORT as SORT_MERGE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
+include { GNU_SORT as SORT_MERGE_SPLICE_JUNCTIONS } from "../../../modules/nf-core/gnu/sort/main.nf"
workflow FASTQ_ALIGN_RNA {
take:
@@ -55,15 +55,16 @@ workflow FASTQ_ALIGN_RNA {
ch_versions = ch_versions.mix(SORT_MERGE_JUNCTIONS.out.versions.first())
emit:
- bam = ch_bam // channel: [ [meta], bam ]
- splice_junctions = SORT_MERGE_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
- junctions = SORT_MERGE_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
- reports = ch_reports // channel: [ [meta], log ]
- versions = ch_versions // channel: [ versions.yml ]
+ bam = ch_bam // channel: [ [meta], bam ]
+ splice_junctions = SORT_MERGE_SPLICE_JUNCTIONS.out.sorted // channel: [ [meta], splice_junctions ]
+ junctions = SORT_MERGE_JUNCTIONS.out.sorted // channel: [ [meta], junctions ]
+ reports = ch_reports // channel: [ [meta], log ]
+ versions = ch_versions // channel: [ versions.yml ]
}
def group_junctions(ch) {
- return ch.map { meta, files ->
+ return ch
+ .map { meta, files ->
def gk = (meta.chunks as Integer ?: 1)
return [
groupKey(
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index 1460d083..1e4a23fb 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -20,7 +20,7 @@ include { getGenomeAttribute } from '../../local/utils_nfcore_preprocessing_p
workflow FASTQ_TO_CRAM {
take:
ch_meta_reads_aligner_index_fasta_gtf // channel: [mandatory] [meta, [fastq, ...], aligner [bowtie2, bwamem, bwamem2, dragmap, snap, star], aligner_index, fasta, gtf]
- markdup // string: [optional ] markdup [bamsormadup, samtools, false]
+ markdup // string: [optional ] markdup [bamsormadup, samtools, false]
main:
@@ -151,10 +151,10 @@ workflow FASTQ_TO_CRAM {
ch_cram_crai.dump(tag: "FASTQ_TO_CRAM: cram and crai", pretty: true)
emit:
- cram_crai = ch_cram_crai
- rna_splice_junctions = FASTQ_ALIGN_RNA.out.splice_junctions
- rna_junctions = FASTQ_ALIGN_RNA.out.junctions
- sormadup_metrics = ch_sormadup_metrics
- align_reports = FASTQ_ALIGN_DNA.out.reports
- versions = ch_versions
+ cram_crai = ch_cram_crai
+ rna_splice_junctions = FASTQ_ALIGN_RNA.out.splice_junctions
+ rna_junctions = FASTQ_ALIGN_RNA.out.junctions
+ sormadup_metrics = ch_sormadup_metrics
+ align_reports = FASTQ_ALIGN_DNA.out.reports
+ versions = ch_versions
}
diff --git a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
index c66aaf01..16fc49ab 100644
--- a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
@@ -8,15 +8,15 @@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
-include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin'
-include { paramsSummaryMap } from 'plugin/nf-schema'
-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'
+include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin'
+include { paramsSummaryMap } from 'plugin/nf-schema'
+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'
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -25,16 +25,15 @@ include { UTILS_NEXTFLOW_PIPELINE } from '../../nf-core/utils_nextflow_pipelin
*/
workflow PIPELINE_INITIALISATION {
-
take:
- version // boolean: Display version and exit
- validate_params // boolean: Boolean whether to validate parameters against the schema at runtime
+ version // boolean: Display version and exit
+ validate_params // boolean: Boolean whether to validate parameters against the schema at runtime
nextflow_cli_args // array: List of positional nextflow CLI args
- outdir // string: The output directory where the results will be saved
- input // string: Path to input samplesheet
- help // boolean: Display help message and exit
- help_full // boolean: Show the full help message
- show_hidden // boolean: Show hidden parameters in the help message
+ outdir // string: The output directory where the results will be saved
+ input // string: Path to input samplesheet
+ help // boolean: Display help message and exit
+ help_full // boolean: Show the full help message
+ show_hidden // boolean: Show hidden parameters in the help message
main:
@@ -43,11 +42,11 @@ workflow PIPELINE_INITIALISATION {
//
// Print version and exit if required and dump pipeline parameters to JSON file
//
- UTILS_NEXTFLOW_PIPELINE (
+ UTILS_NEXTFLOW_PIPELINE(
version,
true,
outdir,
- workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1
+ workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1,
)
//
@@ -55,7 +54,7 @@ workflow PIPELINE_INITIALISATION {
//
command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir "
- UTILS_NFSCHEMA_PLUGIN (
+ UTILS_NFSCHEMA_PLUGIN(
workflow,
validate_params,
null,
@@ -64,13 +63,13 @@ workflow PIPELINE_INITIALISATION {
show_hidden,
"",
"",
- command
+ command,
)
//
// Check config provided to the pipeline
//
- UTILS_NFCORE_PIPELINE (
+ UTILS_NFCORE_PIPELINE(
nextflow_cli_args
)
@@ -97,15 +96,14 @@ workflow PIPELINE_INITIALISATION {
*/
workflow PIPELINE_COMPLETION {
-
take:
- email // string: email address
- email_on_fail // string: email address sent on pipeline failure
+ email // string: email address
+ email_on_fail // string: email address sent on pipeline failure
plaintext_email // boolean: Send plain-text email instead of HTML
- outdir // path: Path to output directory where results will be published
+ 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
+ hook_url // string: hook URL for notifications
+ multiqc_report // string: Path to MultiQC report
main:
summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
@@ -134,7 +132,7 @@ workflow PIPELINE_COMPLETION {
}
workflow.onError {
- log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting"
+ log.error("Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting")
}
}
@@ -157,19 +155,19 @@ def validateInputSamplesheet(input) {
def (metas, fastqs) = input[1..2]
// Check that multiple runs of the same sample are of the same datatype i.e. single-end / paired-end
- def endedness_ok = metas.collect{ meta -> meta.single_end }.unique().size == 1
+ def endedness_ok = metas.collect { meta -> meta.single_end }.unique().size == 1
if (!endedness_ok) {
error("Please check input samplesheet -> Multiple runs of a sample must be of the same datatype i.e. single-end or paired-end: ${metas[0].id}")
}
- return [ metas[0], fastqs ]
+ return [metas[0], fastqs]
}
//
// Get attribute from genome config file e.g. fasta
//
def getGenomeAttribute(genomes, attribute) {
if (genomes && genomes.containsKey(attribute)) {
- return genomes[ attribute ]
+ return genomes[attribute]
}
return null
}
@@ -179,11 +177,7 @@ def getGenomeAttribute(genomes, attribute) {
//
def genomeExistsError() {
if (params.genomes && params.genome && !params.genomes.containsKey(params.genome)) {
- def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
- " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" +
- " Currently, the available genome keys are:\n" +
- " ${params.genomes.keySet().join(", ")}\n" +
- "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ def error_string = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + " Genome '${params.genome}' not found in any config files provided to the pipeline.\n" + " Currently, the available genome keys are:\n" + " ${params.genomes.keySet().join(", ")}\n" + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
error(error_string)
}
}
@@ -194,12 +188,7 @@ def toolCitationText() {
// TODO nf-core: Optionally add in-text citation tools to this list.
// Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Tool (Foo et al. 2023)" : "",
// Uncomment function in methodsDescriptionText to render in MultiQC report
- def citation_text = [
- "Tools used in the workflow included:",
- "FastQC (Andrews 2010),",
- "MultiQC (Ewels et al. 2016)",
- "."
- ].join(' ').trim()
+ def citation_text = ["Tools used in the workflow included:", "FastQC (Andrews 2010),", "MultiQC (Ewels et al. 2016)", "."].join(' ').trim()
return citation_text
}
@@ -208,10 +197,7 @@ def toolBibliographyText() {
// TODO nf-core: Optionally add bibliographic entries to this list.
// Can use ternary operators to dynamically construct based conditions, e.g. params["run_xyz"] ? "Author (2023) Pub name, Journal, DOI " : "",
// Uncomment function in methodsDescriptionText to render in MultiQC report
- def reference_text = [
- "Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/). ",
- "Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354 "
- ].join(' ').trim()
+ def reference_text = ["Andrews S, (2010) FastQC, URL: https://www.bioinformatics.babraham.ac.uk/projects/fastqc/). ", "Ewels, P., Magnusson, M., Lundin, S., & Käller, M. (2016). MultiQC: summarize analysis results for multiple tools and samples in a single report. Bioinformatics , 32(19), 3047–3048. doi: /10.1093/bioinformatics/btw354 "].join(' ').trim()
return reference_text
}
@@ -233,7 +219,10 @@ def methodsDescriptionText(mqc_methods_yaml) {
temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")} ), "
}
meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2)
- } else meta["doi_text"] = ""
+ }
+ else {
+ meta["doi_text"] = ""
+ }
meta["nodoi_text"] = meta.manifest_map.doi ? "" : "If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used. "
// Tool references
@@ -247,7 +236,7 @@ def methodsDescriptionText(mqc_methods_yaml) {
def methods_text = mqc_methods_yaml.text
- def engine = new groovy.text.SimpleTemplateEngine()
+ def engine = new groovy.text.SimpleTemplateEngine()
def description_html = engine.createTemplate(methods_text).make(meta)
return description_html.toString()
diff --git a/tests/config/igenomes_test.config b/tests/config/igenomes_test.config
index 74154eec..cac18b9e 100644
--- a/tests/config/igenomes_test.config
+++ b/tests/config/igenomes_test.config
@@ -1,15 +1,15 @@
params {
genomes {
GRCh38 {
- bwamem = "s3://test-data/genomics/homo_sapiens/genome/bwa/"
- dict = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict"
- fai = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai"
- fasta = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
- star = "s3://test-data/genomics/homo_sapiens/genome/star/"
- gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
+ bwamem = "s3://test-data/genomics/homo_sapiens/genome/bwa/"
+ dict = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict"
+ fai = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai"
+ fasta = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
+ star = "s3://test-data/genomics/homo_sapiens/genome/star/"
+ gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
+ genelists = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
}
}
- genelists = null
}
aws {
diff --git a/tests/subworkflows/local/coverage/main.nf.test b/tests/subworkflows/local/coverage/main.nf.test
index 8792b87c..7b90545d 100644
--- a/tests/subworkflows/local/coverage/main.nf.test
+++ b/tests/subworkflows/local/coverage/main.nf.test
@@ -23,9 +23,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- input[1] = Channel.value([
- file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/genelists/genelist_chr21_per_exon.bed",checkIfExists:true)
- ])
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
+ input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
@@ -52,9 +51,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- input[1] = Channel.value([
- file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/genelists/genelist_chr21_per_exon.bed",checkIfExists:true)
- ])
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
+ input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
diff --git a/tests/subworkflows/local/coverage/main.nf.test.snap b/tests/subworkflows/local/coverage/main.nf.test.snap
index 4df77336..7bd91330 100644
--- a/tests/subworkflows/local/coverage/main.nf.test.snap
+++ b/tests/subworkflows/local/coverage/main.nf.test.snap
@@ -45,7 +45,10 @@
"single_end": false,
"tag": "WES"
},
- "test_genelist_chr21_per_exon.mosdepth.region.dist.txt:md5,e5c7b4f381721888249c57aa55be2d34"
+ [
+ "test_Treatable_ID_per_exon.mosdepth.region.dist.txt:md5,6c2b5237d98e0a2f118a3553c2ba478e",
+ "test_bladder_cancer_per_exon.mosdepth.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"14": [
@@ -232,7 +235,10 @@
"single_end": false,
"tag": "WES"
},
- "test_genelist_chr21_per_exon.mosdepth.region.dist.txt:md5,e5c7b4f381721888249c57aa55be2d34"
+ [
+ "test_Treatable_ID_per_exon.mosdepth.region.dist.txt:md5,6c2b5237d98e0a2f118a3553c2ba478e",
+ "test_bladder_cancer_per_exon.mosdepth.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"samtools_coverage": [
@@ -254,9 +260,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-09T12:02:48.263146"
+ "timestamp": "2026-02-11T14:05:13.106828"
},
"Coverage - seqcap": {
"content": [
@@ -298,10 +304,18 @@
]
],
"13": [
-
+ [
+ {
+ "id": "test",
+ "single_end": false,
+ "tag": "seqcap"
+ },
+ "test_seqcap_Connective_tissue_per_exon.mosdepth.region.dist.txt:md5,e098c901acb1da8c2cf64a248306e71c"
+ ]
],
"14": [
"versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
+ "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
"versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
],
"2": [
@@ -477,7 +491,14 @@
],
"panelcoverage": [
-
+ [
+ {
+ "id": "test",
+ "single_end": false,
+ "tag": "seqcap"
+ },
+ "test_seqcap_Connective_tissue_per_exon.mosdepth.region.dist.txt:md5,e098c901acb1da8c2cf64a248306e71c"
+ ]
],
"samtools_coverage": [
[
@@ -491,14 +512,15 @@
],
"versions": [
"versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
+ "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
"versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-09T12:02:26.604953"
+ "timestamp": "2026-02-11T13:54:02.513877"
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 12d4b8b2..8bf03814 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -59,7 +59,8 @@ workflow PREPROCESSING {
roi = roi ? file(roi, checkIfExists: true) : null
- genelists = genelists ? channel.value(file(genelists + "/*.bed", checkIfExists: true)) : channel.empty()
+ // construct a value channel containing an array of files, because the coverage subworkflow expects a channel of arrays of genelist files (to allow for multiple genelist files per sample)
+ ch_genelists = genelists ? channel.fromPath(genelists).collect().map { files -> [ files ] } : channel.empty()
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From c5e10a3082783deccf24fd15d8b7332832d94ef2 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 18:05:33 +0100
Subject: [PATCH 174/228] fix genelist path parsing
---
tests/subworkflows/local/coverage/main.nf.test | 8 ++++----
workflows/preprocessing.nf | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tests/subworkflows/local/coverage/main.nf.test b/tests/subworkflows/local/coverage/main.nf.test
index 7b90545d..c13bd512 100644
--- a/tests/subworkflows/local/coverage/main.nf.test
+++ b/tests/subworkflows/local/coverage/main.nf.test
@@ -23,8 +23,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
- input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists"
+ input[1] = channel.fromPath(genelists_path + "/*.bed").collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
@@ -51,8 +51,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
- input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists"
+ input[1] = channel.fromPath(genelists_path + "/*.bed").collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 8bf03814..8e79fe1c 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -60,7 +60,7 @@ workflow PREPROCESSING {
roi = roi ? file(roi, checkIfExists: true) : null
// construct a value channel containing an array of files, because the coverage subworkflow expects a channel of arrays of genelist files (to allow for multiple genelist files per sample)
- ch_genelists = genelists ? channel.fromPath(genelists).collect().map { files -> [ files ] } : channel.empty()
+ ch_genelists = genelists ? channel.fromPath(genelists + "/*.bed").collect().map { files -> [ files ] } : channel.empty()
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From f4f213d56a7916e433a8bd96ff28e33af194890f Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 18:13:12 +0100
Subject: [PATCH 175/228] fix variable name
---
workflows/preprocessing.nf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 8e79fe1c..c590253c 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -333,7 +333,7 @@ workflow PREPROCESSING {
def samtools_coverage_out = channel.empty()
def panelcoverage_out = channel.empty()
if (params.run_coverage) {
- COVERAGE(ch_cram_crai_fasta_fai_roi, genelists)
+ COVERAGE(ch_cram_crai_fasta_fai_roi, ch_genelists)
ch_multiqc_files = ch_multiqc_files.mix(
COVERAGE.out.mosdepth_summary,
COVERAGE.out.mosdepth_global,
From 20f538bcd12ed36c0fefb5a54dae61104b0e6abc Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 20:42:09 +0100
Subject: [PATCH 176/228] add falco for unsupported fastq qc
---
main.nf | 424 ++++++++----------
modules.json | 5 +
modules/nf-core/falco/environment.yml | 7 +
modules/nf-core/falco/main.nf | 57 +++
modules/nf-core/falco/meta.yml | 61 +++
modules/nf-core/falco/tests/main.nf.test | 108 +++++
modules/nf-core/falco/tests/main.nf.test.snap | 61 +++
workflows/preprocessing.nf | 103 +++--
8 files changed, 534 insertions(+), 292 deletions(-)
create mode 100644 modules/nf-core/falco/environment.yml
create mode 100644 modules/nf-core/falco/main.nf
create mode 100644 modules/nf-core/falco/meta.yml
create mode 100644 modules/nf-core/falco/tests/main.nf.test
create mode 100644 modules/nf-core/falco/tests/main.nf.test.snap
diff --git a/main.nf b/main.nf
index f9ce7868..dda235c6 100644
--- a/main.nf
+++ b/main.nf
@@ -62,35 +62,37 @@ workflow {
)
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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
- fastp_json = PREPROCESSING.out.fastp_json
- fastp_html = PREPROCESSING.out.fastp_html
- crams = PREPROCESSING.out.crams
- rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
- rna_junctions = PREPROCESSING.out.rna_junctions
- align_reports = PREPROCESSING.out.align_reports
- sormadup_metrics = PREPROCESSING.out.sormadup_metrics
- mosdepth_global = PREPROCESSING.out.mosdepth_global
- mosdepth_summary = PREPROCESSING.out.mosdepth_summary
- mosdepth_regions = PREPROCESSING.out.mosdepth_regions
- mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
- mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
- mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
- mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
- mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
- mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
- mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
- samtools_coverage = PREPROCESSING.out.samtools_coverage
- panelcoverage = PREPROCESSING.out.panelcoverage
- samtools_stats = PREPROCESSING.out.samtools_stats
- samtools_flagstat = PREPROCESSING.out.samtools_flagstat
- samtools_idxstats = PREPROCESSING.out.samtools_idxstats
- picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
+ 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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
+ falco_html = PREPROCESSING.out.falco_html
+ falco_txt = PREPROCESSING.out.falco_txt
+ fastp_json = PREPROCESSING.out.fastp_json
+ fastp_html = PREPROCESSING.out.fastp_html
+ crams = PREPROCESSING.out.crams
+ rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
+ rna_junctions = PREPROCESSING.out.rna_junctions
+ align_reports = PREPROCESSING.out.align_reports
+ sormadup_metrics = PREPROCESSING.out.sormadup_metrics
+ mosdepth_global = PREPROCESSING.out.mosdepth_global
+ mosdepth_summary = PREPROCESSING.out.mosdepth_summary
+ mosdepth_regions = PREPROCESSING.out.mosdepth_regions
+ mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
+ mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
+ samtools_coverage = PREPROCESSING.out.samtools_coverage
+ panelcoverage = PREPROCESSING.out.panelcoverage
+ samtools_stats = PREPROCESSING.out.samtools_stats
+ samtools_flagstat = PREPROCESSING.out.samtools_flagstat
+ samtools_idxstats = PREPROCESSING.out.samtools_idxstats
+ picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
picard_multiplemetrics_pdf = PREPROCESSING.out.picard_multiplemetrics_pdf
picard_wgsmetrics = PREPROCESSING.out.picard_wgsmetrics
picard_hsmetrics = PREPROCESSING.out.picard_hsmetrics
@@ -104,221 +106,151 @@ workflow {
}
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
- }
- }
- demultiplex_logs {
- path { meta, log ->
- def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
- log >> out_path
- }
- }
- 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
- }
- }
- 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
- }
- }
- 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
- }
- }
- 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
- }
- }
- 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
- }
- }
- 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
- }
- }
- 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
- }
- }
- 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
- }
- }
- mosdepth_global {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_summary {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_regions {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_per_base_d4 {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_per_base_bed {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_per_base_csi {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_regions_bed {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_regions_csi {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_quantized_bed {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_quantized_csi {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_thresholds_bed {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- mosdepth_thresholds_csi {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- samtools_coverage {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- panelcoverage {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- samtools_stats {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- samtools_flagstat {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- samtools_idxstats {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- picard_multiplemetrics {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- picard_multiplemetrics_pdf {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- picard_wgsmetrics {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- picard_hsmetrics {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- md5sums {
- path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- }
- }
- multiqc_main_report {
- path "multiqc/"
- }
- multiqc_main_data {
- path "multiqc/"
- }
- multiqc_main_plots {
- path "multiqc/"
- }
- multiqc_library_report {
- path "multiqc/"
- }
- multiqc_library_data {
- path "multiqc/"
- }
- multiqc_library_plots {
- path "multiqc/"
- }
+ 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
+ } }
+ demultiplex_logs { path { meta, log ->
+ def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
+ log >> out_path
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ 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
+ } }
+ mosdepth_global { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_summary { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_regions { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_per_base_d4 { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_per_base_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_per_base_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_regions_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_regions_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_quantized_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_quantized_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_thresholds_bed { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ mosdepth_thresholds_csi { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_coverage { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ panelcoverage { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_stats { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_flagstat { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ samtools_idxstats { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_multiplemetrics { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_multiplemetrics_pdf { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_wgsmetrics { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ picard_hsmetrics { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ md5sums { path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ } }
+ multiqc_main_report { path "multiqc/" }
+ multiqc_main_data { path "multiqc/" }
+ multiqc_main_plots { path "multiqc/" }
+ multiqc_library_report { path "multiqc/" }
+ multiqc_library_data { path "multiqc/" }
+ multiqc_library_plots { path "multiqc/" }
}
diff --git a/modules.json b/modules.json
index 4ec35dbd..a75b44bf 100644
--- a/modules.json
+++ b/modules.json
@@ -46,6 +46,11 @@
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
+ "falco": {
+ "branch": "master",
+ "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "installed_by": ["modules"]
+ },
"fastp": {
"branch": "master",
"git_sha": "a331ecfd1aa48b2b2298aab23bb4516c800e410b",
diff --git a/modules/nf-core/falco/environment.yml b/modules/nf-core/falco/environment.yml
new file mode 100644
index 00000000..59c973a9
--- /dev/null
+++ b/modules/nf-core/falco/environment.yml
@@ -0,0 +1,7 @@
+---
+# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json
+channels:
+ - conda-forge
+ - bioconda
+dependencies:
+ - bioconda::falco=1.2.1
diff --git a/modules/nf-core/falco/main.nf b/modules/nf-core/falco/main.nf
new file mode 100644
index 00000000..a4b343b2
--- /dev/null
+++ b/modules/nf-core/falco/main.nf
@@ -0,0 +1,57 @@
+process FALCO {
+ tag "$meta.id"
+ label 'process_single'
+
+
+ conda "${moduleDir}/environment.yml"
+ container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
+ 'https://depot.galaxyproject.org/singularity/falco:1.2.1--h867801b_3':
+ 'biocontainers/falco:1.2.1--h867801b_3' }"
+
+ input:
+ tuple val(meta), path(reads)
+
+ output:
+ tuple val(meta), path("*.html"), emit: html
+ tuple val(meta), path("*.txt") , emit: txt
+ path "versions.yml" , emit: versions
+
+ when:
+ task.ext.when == null || task.ext.when
+
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ if ( reads.toList().size() == 1 ) {
+ """
+ falco $args --threads $task.cpus ${reads} -D ${prefix}_fastqc_data.txt -S ${prefix}_summary.txt -R ${prefix}_report.html
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ falco:\$( falco --version | sed -e "s/falco//g" )
+ END_VERSIONS
+ """
+ } else {
+ """
+ falco $args --threads $task.cpus ${reads}
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ falco:\$( falco --version | sed -e "s/falco//g" )
+ END_VERSIONS
+ """
+ }
+
+ stub:
+ def prefix = task.ext.prefix ?: "${meta.id}"
+ """
+ touch ${prefix}_data.txt
+ touch ${prefix}_fastqc_data.html
+ touch ${prefix}_summary.txt
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
+ falco: \$( falco --version | sed -e "s/falco v//g" )
+ END_VERSIONS
+ """
+}
diff --git a/modules/nf-core/falco/meta.yml b/modules/nf-core/falco/meta.yml
new file mode 100644
index 00000000..1450f2da
--- /dev/null
+++ b/modules/nf-core/falco/meta.yml
@@ -0,0 +1,61 @@
+name: falco
+description: Run falco on sequenced reads
+keywords:
+ - quality control
+ - qc
+ - adapters
+ - fastq
+tools:
+ - fastqc:
+ description: "falco is a drop-in C++ implementation of FastQC to assess the quality
+ of sequence reads."
+ homepage: "https://falco.readthedocs.io/"
+ documentation: "https://falco.readthedocs.io/"
+ licence: ["GPL v3"]
+ identifier: biotools:falco-rna
+input:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - reads:
+ type: file
+ description: |
+ List of input FastQ files of size 1 and 2 for single-end and paired-end data,
+ respectively.
+ ontologies: []
+output:
+ html:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - "*.html":
+ type: file
+ description: FastQC like report
+ pattern: "*_{fastqc_report.html}"
+ ontologies: []
+ txt:
+ - - meta:
+ type: map
+ description: |
+ Groovy Map containing sample information
+ e.g. [ id:'test', single_end:false ]
+ - "*.txt":
+ type: file
+ description: falco report data
+ pattern: "*_{data.txt}"
+ ontologies: []
+ versions:
+ - versions.yml:
+ type: file
+ description: File containing software versions
+ pattern: "versions.yml"
+ ontologies:
+ - edam: http://edamontology.org/format_3750 # YAML
+authors:
+ - "@lucacozzuto"
+maintainers:
+ - "@lucacozzuto"
diff --git a/modules/nf-core/falco/tests/main.nf.test b/modules/nf-core/falco/tests/main.nf.test
new file mode 100644
index 00000000..816c72ba
--- /dev/null
+++ b/modules/nf-core/falco/tests/main.nf.test
@@ -0,0 +1,108 @@
+nextflow_process {
+
+ name "Test Process FALCO"
+ script "../main.nf"
+ process "FALCO"
+
+ tag "modules"
+ tag "modules_nfcore"
+ tag "falco"
+
+ test("sarscov2 - fastq - single end") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:true ],
+ [
+ file(
+ params.test_data['sarscov2']['illumina']['test_1_fastq_gz'],
+ checkIfExists: true
+ ),
+ ],
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.txt,
+ file(process.out.html.get(0).get(1)).list(),
+ ).match()
+ },
+ )
+ }
+
+ }
+
+ test("sarscov2 - fastq - paired end") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:false ],
+ [
+ file(
+ params.test_data['sarscov2']['illumina']['test_1_fastq_gz'],
+ checkIfExists: true
+ ),
+ file(
+ params.test_data['sarscov2']['illumina']['test_2_fastq_gz'],
+ checkIfExists: true
+ ),
+ ],
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.txt,
+ process.out.html.get(0).get(1).collect{ it.split("/")[-1] }.sort(),
+ ).match()
+ },
+ )
+ }
+
+ }
+
+ test("sarscov2 - fastq - interleaved") {
+
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:false ],
+ [
+ file(
+ params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'],
+ checkIfExists: true
+ ),
+ ],
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(
+ process.out.txt,
+ file(process.out.html.get(0).get(1)).list(),
+ ).match()
+ },
+ )
+ }
+
+ }
+
+}
diff --git a/modules/nf-core/falco/tests/main.nf.test.snap b/modules/nf-core/falco/tests/main.nf.test.snap
new file mode 100644
index 00000000..34ac64e3
--- /dev/null
+++ b/modules/nf-core/falco/tests/main.nf.test.snap
@@ -0,0 +1,61 @@
+{
+ "sarscov2 - fastq - single end": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ [
+ "test_fastqc_data.txt:md5,36d989bb9e2d5a632e19452f4e6c2a4e",
+ "test_summary.txt:md5,a925aec214a83d2f6252847166f2ef3a"
+ ]
+ ]
+ ],
+ null
+ ],
+ "timestamp": "2024-02-02T16:28:17.756764"
+ },
+ "sarscov2 - fastq - paired end": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_1.fastq.gz_fastqc_data.txt:md5,36d989bb9e2d5a632e19452f4e6c2a4e",
+ "test_1.fastq.gz_summary.txt:md5,a925aec214a83d2f6252847166f2ef3a",
+ "test_2.fastq.gz_fastqc_data.txt:md5,ad5c45dfc8f79754dd5d8029456b715b",
+ "test_2.fastq.gz_summary.txt:md5,d0cb642adefb5635a25e808f1f38780a"
+ ]
+ ]
+ ],
+ [
+ "test_1.fastq.gz_fastqc_report.html",
+ "test_2.fastq.gz_fastqc_report.html"
+ ]
+ ],
+ "timestamp": "2024-02-02T16:22:11.757473"
+ },
+ "sarscov2 - fastq - interleaved": {
+ "content": [
+ [
+ [
+ {
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test_fastqc_data.txt:md5,b5e593f140fe578bdd25ceb84e98fd37",
+ "test_summary.txt:md5,ca52f458b1223d89db69e2d5e73cf867"
+ ]
+ ]
+ ],
+ null
+ ],
+ "timestamp": "2024-02-02T16:28:36.035899"
+ }
+}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 94cb7fdb..6f10a5af 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -7,12 +7,13 @@ include { samplesheetToList } from 'plugin/nf-schema'
*/
// Modules
-include { FASTP } from '../modules/nf-core/fastp/main'
-include { MD5SUM } from '../modules/nf-core/md5sum/main'
-include { MOSDEPTH } from '../modules/nf-core/mosdepth/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 { FALCO } from '../modules/nf-core/falcon/main'
+include { FASTP } from '../modules/nf-core/fastp/main'
+include { MD5SUM } from '../modules/nf-core/md5sum/main'
+include { MOSDEPTH } from '../modules/nf-core/mosdepth/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'
// Subworkflows
include { BAM_QC } from '../subworkflows/local/bam_qc/main'
@@ -184,6 +185,14 @@ workflow PREPROCESSING {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
+ // MODULE: FALCO
+ // Run FALCO for "unsupported" fastq QC
+ // FALCO([meta, fastq])
+ FALCO(ch_fastq_per_sample.other, false)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
+ ch_versions = ch_versions.mix(FALCO.out.versions.first())
+
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
@@ -399,46 +408,48 @@ workflow PREPROCESSING {
)
emit:
- demultiplex_interop = BCL_DEMULTIPLEX.out.interop
- demultiplex_reports = BCL_DEMULTIPLEX.out.reports
- demultiplex_logs = BCL_DEMULTIPLEX.out.logs
- demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
- fastp_json = FASTP.out.json
- fastp_html = FASTP.out.html
- crams = FASTQ_TO_CRAM.out.cram_crai
- rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
- rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
- align_reports = FASTQ_TO_CRAM.out.align_reports
- sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = COVERAGE.out.mosdepth_global
- mosdepth_summary = COVERAGE.out.mosdepth_summary
- mosdepth_regions = COVERAGE.out.mosdepth_regions
- mosdepth_per_base_d4 = COVERAGE.out.mosdepth_per_base_d4
- mosdepth_per_base_bed = COVERAGE.out.mosdepth_per_base_bed
- mosdepth_per_base_csi = COVERAGE.out.mosdepth_per_base_csi
- mosdepth_regions_bed = COVERAGE.out.mosdepth_regions_bed
- mosdepth_regions_csi = COVERAGE.out.mosdepth_regions_csi
- mosdepth_quantized_bed = COVERAGE.out.mosdepth_quantized_bed
- mosdepth_quantized_csi = COVERAGE.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed = COVERAGE.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi = COVERAGE.out.mosdepth_thresholds_csi
- samtools_coverage = COVERAGE.out.samtools_coverage
- panelcoverage = COVERAGE.out.panelcoverage
- samtools_stats = BAM_QC.out.samtools_stats
- samtools_flagstat = BAM_QC.out.samtools_flagstat
- samtools_idxstats = BAM_QC.out.samtools_idxstats
- picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
- picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
- 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
- versions = ch_versions
+ demultiplex_interop = BCL_DEMULTIPLEX.out.interop
+ demultiplex_reports = BCL_DEMULTIPLEX.out.reports
+ demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
+ falco_html = FALCO.out.html
+ falco_txt = FALCO.out.txt
+ fastp_json = FASTP.out.json
+ fastp_html = FASTP.out.html
+ crams = FASTQ_TO_CRAM.out.cram_crai
+ rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
+ rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
+ align_reports = FASTQ_TO_CRAM.out.align_reports
+ sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
+ mosdepth_global = mosdepth_global_out
+ mosdepth_summary = mosdepth_summary_out
+ mosdepth_regions = mosdepth_regions_out
+ mosdepth_per_base_d4 = mosdepth_per_base_d4_out
+ mosdepth_per_base_bed = mosdepth_per_base_bed_out
+ mosdepth_per_base_csi = mosdepth_per_base_csi_out
+ mosdepth_regions_bed = mosdepth_regions_bed_out
+ mosdepth_regions_csi = mosdepth_regions_csi_out
+ mosdepth_quantized_bed = mosdepth_quantized_bed_out
+ mosdepth_quantized_csi = mosdepth_quantized_csi_out
+ mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
+ mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
+ samtools_coverage = samtools_coverage_out
+ panelcoverage = panelcoverage_out
+ samtools_stats = BAM_QC.out.samtools_stats
+ samtools_flagstat = BAM_QC.out.samtools_flagstat
+ samtools_idxstats = BAM_QC.out.samtools_idxstats
+ picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
+ picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
+ 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
+ versions = ch_versions
}
/*
From 0aa6686d54179a7292fa57abc44f4f62bc70f85a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 08:45:02 +0100
Subject: [PATCH 177/228] fix typo + linting
---
main.nf | 438 ++++++++++++++++++++++---------------
workflows/preprocessing.nf | 117 +++++-----
2 files changed, 316 insertions(+), 239 deletions(-)
diff --git a/main.nf b/main.nf
index dda235c6..aed6d7b5 100644
--- a/main.nf
+++ b/main.nf
@@ -62,37 +62,37 @@ workflow {
)
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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
- falco_html = PREPROCESSING.out.falco_html
- falco_txt = PREPROCESSING.out.falco_txt
- fastp_json = PREPROCESSING.out.fastp_json
- fastp_html = PREPROCESSING.out.fastp_html
- crams = PREPROCESSING.out.crams
- rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
- rna_junctions = PREPROCESSING.out.rna_junctions
- align_reports = PREPROCESSING.out.align_reports
- sormadup_metrics = PREPROCESSING.out.sormadup_metrics
- mosdepth_global = PREPROCESSING.out.mosdepth_global
- mosdepth_summary = PREPROCESSING.out.mosdepth_summary
- mosdepth_regions = PREPROCESSING.out.mosdepth_regions
- mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
- mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
- mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
- mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
- mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
- mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
- mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
- mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
- mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
- samtools_coverage = PREPROCESSING.out.samtools_coverage
- panelcoverage = PREPROCESSING.out.panelcoverage
- samtools_stats = PREPROCESSING.out.samtools_stats
- samtools_flagstat = PREPROCESSING.out.samtools_flagstat
- samtools_idxstats = PREPROCESSING.out.samtools_idxstats
- picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
+ 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_fastq = PREPROCESSING.out.demultiplex_fastq.transpose()
+ falco_html = PREPROCESSING.out.falco_html
+ falco_txt = PREPROCESSING.out.falco_txt
+ fastp_json = PREPROCESSING.out.fastp_json
+ fastp_html = PREPROCESSING.out.fastp_html
+ crams = PREPROCESSING.out.crams
+ rna_splice_junctions = PREPROCESSING.out.rna_splice_junctions
+ rna_junctions = PREPROCESSING.out.rna_junctions
+ align_reports = PREPROCESSING.out.align_reports
+ sormadup_metrics = PREPROCESSING.out.sormadup_metrics
+ mosdepth_global = PREPROCESSING.out.mosdepth_global
+ mosdepth_summary = PREPROCESSING.out.mosdepth_summary
+ mosdepth_regions = PREPROCESSING.out.mosdepth_regions
+ mosdepth_per_base_d4 = PREPROCESSING.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = PREPROCESSING.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = PREPROCESSING.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = PREPROCESSING.out.mosdepth_regions_bed
+ mosdepth_regions_csi = PREPROCESSING.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = PREPROCESSING.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = PREPROCESSING.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = PREPROCESSING.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = PREPROCESSING.out.mosdepth_thresholds_csi
+ samtools_coverage = PREPROCESSING.out.samtools_coverage
+ panelcoverage = PREPROCESSING.out.panelcoverage
+ samtools_stats = PREPROCESSING.out.samtools_stats
+ samtools_flagstat = PREPROCESSING.out.samtools_flagstat
+ samtools_idxstats = PREPROCESSING.out.samtools_idxstats
+ picard_multiplemetrics = PREPROCESSING.out.picard_multiplemetrics
picard_multiplemetrics_pdf = PREPROCESSING.out.picard_multiplemetrics_pdf
picard_wgsmetrics = PREPROCESSING.out.picard_wgsmetrics
picard_hsmetrics = PREPROCESSING.out.picard_hsmetrics
@@ -106,151 +106,233 @@ workflow {
}
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
- } }
- demultiplex_logs { path { meta, log ->
- def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
- log >> out_path
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- 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
- } }
- mosdepth_global { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_summary { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_d4 { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_per_base_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_regions_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_quantized_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_quantized_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_thresholds_bed { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- mosdepth_thresholds_csi { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_coverage { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- panelcoverage { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_stats { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_flagstat { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- samtools_idxstats { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_multiplemetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_multiplemetrics_pdf { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_wgsmetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- picard_hsmetrics { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- md5sums { path { meta, _file ->
- def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
- return out_path
- } }
- multiqc_main_report { path "multiqc/" }
- multiqc_main_data { path "multiqc/" }
- multiqc_main_plots { path "multiqc/" }
- multiqc_library_report { path "multiqc/" }
- multiqc_library_data { path "multiqc/" }
- multiqc_library_plots { path "multiqc/" }
+ 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
+ }
+ }
+ demultiplex_logs {
+ path { meta, log ->
+ def out_path = meta.lane ? "Logs/L00${meta.lane}/${log.name}" as String : "Logs/${log.name}"
+ log >> out_path
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ 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
+ }
+ }
+ mosdepth_global {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_summary {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_d4 {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_per_base_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_regions_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_quantized_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_quantized_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_thresholds_bed {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ mosdepth_thresholds_csi {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_coverage {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ panelcoverage {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_stats {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_flagstat {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ samtools_idxstats {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_multiplemetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_multiplemetrics_pdf {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_wgsmetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ picard_hsmetrics {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ md5sums {
+ path { meta, _file ->
+ def out_path = meta.library ? "${meta.library}/${meta.samplename}/" as String : "${meta.samplename}/"
+ return out_path
+ }
+ }
+ multiqc_main_report {
+ path "multiqc/"
+ }
+ multiqc_main_data {
+ path "multiqc/"
+ }
+ multiqc_main_plots {
+ path "multiqc/"
+ }
+ multiqc_library_report {
+ path "multiqc/"
+ }
+ multiqc_library_data {
+ path "multiqc/"
+ }
+ multiqc_library_plots {
+ path "multiqc/"
+ }
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 6f10a5af..477f5fd2 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -7,13 +7,13 @@ include { samplesheetToList } from 'plugin/nf-schema'
*/
// Modules
-include { FALCO } from '../modules/nf-core/falcon/main'
-include { FASTP } from '../modules/nf-core/fastp/main'
-include { MD5SUM } from '../modules/nf-core/md5sum/main'
-include { MOSDEPTH } from '../modules/nf-core/mosdepth/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 { FALCO } from '../modules/nf-core/falco/main'
+include { FASTP } from '../modules/nf-core/fastp/main'
+include { MD5SUM } from '../modules/nf-core/md5sum/main'
+include { MOSDEPTH } from '../modules/nf-core/mosdepth/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'
// Subworkflows
include { BAM_QC } from '../subworkflows/local/bam_qc/main'
@@ -188,22 +188,17 @@ workflow PREPROCESSING {
// MODULE: FALCO
// Run FALCO for "unsupported" fastq QC
// FALCO([meta, fastq])
- FALCO(ch_fastq_per_sample.other, false)
- ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
- ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
- ch_versions = ch_versions.mix(FALCO.out.versions.first())
+ FALCO(ch_fastq_per_sample.other)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
+ ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
+ ch_versions = ch_versions.mix(FALCO.out.versions.first())
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
- FASTP(
- ch_fastq_per_sample.supported.map { meta, fastq ->
- return [meta, fastq, []]
- },
- false,
- false,
- false,
- )
+ FASTP(ch_fastq_per_sample.supported.map { meta, fastq ->
+ return [meta, fastq, []]
+ }, false, false, false)
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
// edit meta.id to match sample name
@@ -408,48 +403,48 @@ workflow PREPROCESSING {
)
emit:
- demultiplex_interop = BCL_DEMULTIPLEX.out.interop
- demultiplex_reports = BCL_DEMULTIPLEX.out.reports
- demultiplex_logs = BCL_DEMULTIPLEX.out.logs
- demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
- falco_html = FALCO.out.html
- falco_txt = FALCO.out.txt
- fastp_json = FASTP.out.json
- fastp_html = FASTP.out.html
- crams = FASTQ_TO_CRAM.out.cram_crai
- rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
- rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
- align_reports = FASTQ_TO_CRAM.out.align_reports
- sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = mosdepth_global_out
- mosdepth_summary = mosdepth_summary_out
- mosdepth_regions = mosdepth_regions_out
- mosdepth_per_base_d4 = mosdepth_per_base_d4_out
- mosdepth_per_base_bed = mosdepth_per_base_bed_out
- mosdepth_per_base_csi = mosdepth_per_base_csi_out
- mosdepth_regions_bed = mosdepth_regions_bed_out
- mosdepth_regions_csi = mosdepth_regions_csi_out
- mosdepth_quantized_bed = mosdepth_quantized_bed_out
- mosdepth_quantized_csi = mosdepth_quantized_csi_out
- mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
- mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
- samtools_coverage = samtools_coverage_out
- panelcoverage = panelcoverage_out
- samtools_stats = BAM_QC.out.samtools_stats
- samtools_flagstat = BAM_QC.out.samtools_flagstat
- samtools_idxstats = BAM_QC.out.samtools_idxstats
- picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
- picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
- 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
- versions = ch_versions
+ demultiplex_interop = BCL_DEMULTIPLEX.out.interop
+ demultiplex_reports = BCL_DEMULTIPLEX.out.reports
+ demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
+ falco_html = FALCO.out.html
+ falco_txt = FALCO.out.txt
+ fastp_json = FASTP.out.json
+ fastp_html = FASTP.out.html
+ crams = FASTQ_TO_CRAM.out.cram_crai
+ rna_splice_junctions = FASTQ_TO_CRAM.out.rna_splice_junctions
+ rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
+ align_reports = FASTQ_TO_CRAM.out.align_reports
+ sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
+ mosdepth_global = mosdepth_global_out
+ mosdepth_summary = mosdepth_summary_out
+ mosdepth_regions = mosdepth_regions_out
+ mosdepth_per_base_d4 = mosdepth_per_base_d4_out
+ mosdepth_per_base_bed = mosdepth_per_base_bed_out
+ mosdepth_per_base_csi = mosdepth_per_base_csi_out
+ mosdepth_regions_bed = mosdepth_regions_bed_out
+ mosdepth_regions_csi = mosdepth_regions_csi_out
+ mosdepth_quantized_bed = mosdepth_quantized_bed_out
+ mosdepth_quantized_csi = mosdepth_quantized_csi_out
+ mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
+ mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
+ samtools_coverage = samtools_coverage_out
+ panelcoverage = panelcoverage_out
+ samtools_stats = BAM_QC.out.samtools_stats
+ samtools_flagstat = BAM_QC.out.samtools_flagstat
+ samtools_idxstats = BAM_QC.out.samtools_idxstats
+ picard_multiplemetrics = BAM_QC.out.picard_multiplemetrics
+ picard_multiplemetrics_pdf = BAM_QC.out.picard_multiplemetrics_pdf
+ 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
+ versions = ch_versions
}
/*
From 2dd72229226dc557cc4a2f1c550267f45265a7fe Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 09:04:36 +0100
Subject: [PATCH 178/228] drop unused gh workflows
---
.github/workflows/fix-linting.yml | 89 -------------------------------
.github/workflows/fix_linting.yml | 89 -------------------------------
2 files changed, 178 deletions(-)
delete mode 100644 .github/workflows/fix-linting.yml
delete mode 100644 .github/workflows/fix_linting.yml
diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml
deleted file mode 100644
index 2230aafb..00000000
--- a/.github/workflows/fix-linting.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-name: Fix linting from a comment
-on:
- issue_comment:
- types: [created]
-
-jobs:
- fix-linting:
- # Only run if comment is on a PR with the main repo, and if it contains the magic keywords
- if: >
- contains(github.event.comment.html_url, '/pull/') &&
- contains(github.event.comment.body, '@nf-core-bot fix linting') &&
- github.repository == 'nf-cmgg/preprocessing'
- runs-on: ubuntu-latest
- steps:
- # Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
- with:
- token: ${{ secrets.nf_core_bot_auth_token }}
-
- # indication that the linting is being fixed
- - name: React on comment
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: eyes
-
- # Action runs on the issue comment, so we don't get the PR by default
- # Use the gh cli to check out the PR
- - name: Checkout Pull Request
- run: gh pr checkout ${{ github.event.issue.number }}
- env:
- GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
-
- # Install and run pre-commit
- - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
- with:
- python-version: 3.11
-
- - name: Install pre-commit
- run: pip install pre-commit
-
- - name: Run pre-commit
- id: pre-commit
- run: pre-commit run --all-files
- continue-on-error: true
-
- # indication that the linting has finished
- - name: react if linting finished succesfully
- if: steps.pre-commit.outcome == 'success'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: "+1"
-
- - name: Commit & push changes
- id: commit-and-push
- if: steps.pre-commit.outcome == 'failure'
- run: |
- git config user.email "core@nf-co.re"
- git config user.name "nf-core-bot"
- git config push.default upstream
- git add .
- git status
- git commit -m "[automated] Fix code linting"
- git push
-
- - name: react if linting errors were fixed
- id: react-if-fixed
- if: steps.commit-and-push.outcome == 'success'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: hooray
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: confused
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4
- with:
- issue-number: ${{ github.event.issue.number }}
- body: |
- @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually.
- See [CI log](https://github.com/nf-cmgg/preprocessing/actions/runs/${{ github.run_id }}) for more details.
diff --git a/.github/workflows/fix_linting.yml b/.github/workflows/fix_linting.yml
deleted file mode 100644
index 63b82243..00000000
--- a/.github/workflows/fix_linting.yml
+++ /dev/null
@@ -1,89 +0,0 @@
-name: Fix linting from a comment
-on:
- issue_comment:
- types: [created]
-
-jobs:
- fix-linting:
- # Only run if comment is on a PR with the main repo, and if it contains the magic keywords
- if: >
- contains(github.event.comment.html_url, '/pull/') &&
- contains(github.event.comment.body, '@nf-core-bot fix linting') &&
- github.repository == 'nf-cmgg/preprocessing'
- runs-on: ubuntu-latest
- steps:
- # Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
- with:
- token: ${{ secrets.nf_core_bot_auth_token }}
-
- # indication that the linting is being fixed
- - name: React on comment
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: eyes
-
- # Action runs on the issue comment, so we don't get the PR by default
- # Use the gh cli to check out the PR
- - name: Checkout Pull Request
- run: gh pr checkout ${{ github.event.issue.number }}
- env:
- GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
-
- # Install and run pre-commit
- - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
- with:
- python-version: "3.14"
-
- - name: Install pre-commit
- run: pip install pre-commit
-
- - name: Run pre-commit
- id: pre-commit
- run: pre-commit run --all-files
- continue-on-error: true
-
- # indication that the linting has finished
- - name: react if linting finished succesfully
- if: steps.pre-commit.outcome == 'success'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: "+1"
-
- - name: Commit & push changes
- id: commit-and-push
- if: steps.pre-commit.outcome == 'failure'
- run: |
- git config user.email "core@nf-co.re"
- git config user.name "nf-core-bot"
- git config push.default upstream
- git add .
- git status
- git commit -m "[automated] Fix code linting"
- git push
-
- - name: react if linting errors were fixed
- id: react-if-fixed
- if: steps.commit-and-push.outcome == 'success'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: hooray
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- comment-id: ${{ github.event.comment.id }}
- reactions: confused
-
- - name: react if linting errors were not fixed
- if: steps.commit-and-push.outcome == 'failure'
- uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5
- with:
- issue-number: ${{ github.event.issue.number }}
- body: |
- @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually.
- See [CI log](https://github.com/nf-cmgg/preprocessing/actions/runs/${{ github.run_id }}) for more details.
From d534d9029b21cfb8c393377c9a3c150974d4c6dc Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 09:04:57 +0100
Subject: [PATCH 179/228] calculate checksums for fastq output
---
workflows/preprocessing.nf | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 477f5fd2..541f0359 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -196,9 +196,14 @@ workflow PREPROCESSING {
// MODULE: fastp
// Run QC, trimming and adapter removal
// FASTP([meta, fastq, adapter_fasta], save_trimmed, save_merged)
- FASTP(ch_fastq_per_sample.supported.map { meta, fastq ->
- return [meta, fastq, []]
- }, false, false, false)
+ FASTP(
+ ch_fastq_per_sample.supported.map { meta, fastq ->
+ return [meta, fastq, []]
+ },
+ false,
+ false,
+ false,
+ )
ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json)
// edit meta.id to match sample name
@@ -311,9 +316,11 @@ workflow PREPROCESSING {
*/
MD5SUM(
- FASTQ_TO_CRAM.out.cram_crai.map { meta, cram, _crai ->
- return [meta, cram]
- },
+ ch_fastq_per_sample.other.mix(
+ FASTQ_TO_CRAM.out.cram_crai.map { meta, cram, _crai ->
+ return [meta, cram]
+ }
+ ),
false,
)
ch_versions = ch_versions.mix(MD5SUM.out.versions.first())
From 670c18d2097226dde718ede0a5310d7db2630ee2 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 10:03:53 +0100
Subject: [PATCH 180/228] nextflow config lint
---
nextflow.config | 6 +-----
nextflow_schema.json | 51 --------------------------------------------
2 files changed, 1 insertion(+), 56 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 05719293..13067b73 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -197,11 +197,7 @@ includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !pa
// Load nf-cmgg/preprocessing custom profiles from different institutions.
-// TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs
-// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
-
-// Load nf-cmgg/preprocessing custom profiles from nf-cmgg/configs.
-includeConfig params.cmgg_custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.cmgg_custom_config_base.startsWith('http')) ? "${params.cmgg_custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
+includeConfig params.custom_config_base && params.custom_config_base.contains('nf-cmgg') && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/preprocessing.config" : "/dev/null"
// Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile
// Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 722c57ce..e0d5f227 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -123,54 +123,6 @@
}
}
},
- "cmgg_institutional_config_options": {
- "title": "nf-cmgg config options",
- "type": "object",
- "fa_icon": "fas fa-university",
- "description": "Parameters used to describe centralised config profiles. These should not be edited.",
- "help_text": "The centralised nf-cmgg configuration profiles use a handful of pipeline parameters to describe themselves. This information is then printed to the Nextflow log when you run a pipeline. You should not need to change these values when you run a pipeline.",
- "properties": {
- "cmgg_custom_config_version": {
- "type": "string",
- "description": "Git commit id for nf-cmgg configs.",
- "default": "master",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_custom_config_base": {
- "type": "string",
- "description": "Base directory for nf-cmgg configs.",
- "default": "https://raw.githubusercontent.com/nf-cmgg/configs/master",
- "hidden": true,
- "help_text": "If 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.",
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_name": {
- "type": "string",
- "description": "nf-cmgg config name.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_description": {
- "type": "string",
- "description": "nf-cmgg config description.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_contact": {
- "type": "string",
- "description": "nf-cmgg config contact information.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- },
- "cmgg_config_profile_url": {
- "type": "string",
- "description": "nf-cmgg config URL link.",
- "hidden": true,
- "fa_icon": "fas fa-users-cog"
- }
- }
- },
"generic_options": {
"title": "Generic options",
"type": "object",
@@ -312,9 +264,6 @@
{
"$ref": "#/$defs/institutional_config_options"
},
- {
- "$ref": "#/$defs/cmgg_institutional_config_options"
- },
{
"$ref": "#/$defs/generic_options"
}
From 5e9a2d54c05ad9f1d4a967c4207cd6b2b5f22876 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 11:49:18 +0100
Subject: [PATCH 181/228] fix tests
---
conf/modules.config | 3 +++
modules/nf-core/picard/collecthsmetrics/main.nf | 5 +++--
modules/nf-core/picard/collectmultiplemetrics/main.nf | 2 ++
modules/nf-core/picard/collectwgsmetrics/main.nf | 2 ++
subworkflows/local/coverage/main.nf | 10 ++++------
tests/config/igenomes_test.config | 1 +
6 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 16f7338f..03f7047a 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -305,4 +305,7 @@ env {
MOSDEPTH_Q0 = 'NO_COVERAGE'
MOSDEPTH_Q1 = 'LOW_COVERAGE'
MOSDEPTH_Q2 = 'CALLABLE'
+
+ // Set TMPDIR for all modules
+ TMPDIR = "$PWD"
}
diff --git a/modules/nf-core/picard/collecthsmetrics/main.nf b/modules/nf-core/picard/collecthsmetrics/main.nf
index 63b3479c..22d95d57 100644
--- a/modules/nf-core/picard/collecthsmetrics/main.nf
+++ b/modules/nf-core/picard/collecthsmetrics/main.nf
@@ -45,6 +45,7 @@ process PICARD_COLLECTHSMETRICS {
"""
+ export TMP=\$PWD
$bait_intervallist_cmd
$target_intervallist_cmd
@@ -57,8 +58,8 @@ process PICARD_COLLECTHSMETRICS {
--BAIT_INTERVALS $bait_interval_list \\
--TARGET_INTERVALS $target_interval_list \\
--INPUT $bam \\
- --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics
-
+ --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics \\
+ --TMP_DIR .
"""
stub:
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index 158a746f..28d8eaa0 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -30,6 +30,7 @@ process PICARD_COLLECTMULTIPLEMETRICS {
avail_mem = (task.memory.mega*0.8).intValue()
}
"""
+ export TMP=\$PWD
picard \\
-Xmx${avail_mem}M \\
CollectMultipleMetrics \\
@@ -37,6 +38,7 @@ process PICARD_COLLECTMULTIPLEMETRICS {
--INPUT $bam \\
--OUTPUT ${prefix}.CollectMultipleMetrics \\
$intervals_cmd \\
+ --TMP_DIR . \\
$reference_cmd
"""
diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf
index 63330d22..a631b03f 100644
--- a/modules/nf-core/picard/collectwgsmetrics/main.nf
+++ b/modules/nf-core/picard/collectwgsmetrics/main.nf
@@ -29,6 +29,7 @@ process PICARD_COLLECTWGSMETRICS {
avail_mem = (task.memory.mega*0.8).intValue()
}
"""
+ export TMP=\$PWD
picard \\
-Xmx${avail_mem}M \\
CollectWgsMetrics \\
@@ -36,6 +37,7 @@ process PICARD_COLLECTWGSMETRICS {
--INPUT $bam \\
--OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\
--REFERENCE_SEQUENCE ${fasta} \\
+ --TMP_DIR . \\
$interval
"""
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index cca3ca59..ccbf27ad 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -30,13 +30,11 @@ workflow COVERAGE {
PANELCOVERAGE(
MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
- if (genelists !instanceof List) {
- // Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
- genelists = [genelists]
- }
+ // Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
+ def genelists_array = genelists !instanceof List ? [genelists] : genelists
def filtered_genelists = meta.tag.toLowerCase() == "seqcap"
- ? genelists.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
- : genelists.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
+ ? genelists_array.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
+ : genelists_array.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
if (filtered_genelists.size() > 0) {
return [
diff --git a/tests/config/igenomes_test.config b/tests/config/igenomes_test.config
index 80984075..74154eec 100644
--- a/tests/config/igenomes_test.config
+++ b/tests/config/igenomes_test.config
@@ -9,6 +9,7 @@ params {
gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
}
}
+ genelists = null
}
aws {
From de6df09db397aaf0bbd6ee49f6a5326069f8b89e Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 11:50:33 +0100
Subject: [PATCH 182/228] module patches
---
.../picard-collecthsmetrics.diff | 18 +++++++++++++++++-
.../picard-collectwgsmetrics.diff | 16 ++++++++++++++++
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
index 5907d093..1407a35a 100644
--- a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
+++ b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
@@ -26,7 +26,7 @@ Changes in 'picard/collecthsmetrics/main.nf':
def avail_mem = 3072
if (!task.memory) {
-@@ -37,14 +33,14 @@
+@@ -37,18 +33,19 @@
def bait_intervallist_cmd = ""
if (bait_intervals =~ /.(bed|bed.gz)$/){
bait_interval_list = bait_intervals.toString().replaceAll(/.(bed|bed.gz)$/, ".interval_list")
@@ -43,6 +43,22 @@ Changes in 'picard/collecthsmetrics/main.nf':
}
+ """
++ export TMP=\$PWD
+
+ $bait_intervallist_cmd
+ $target_intervallist_cmd
+@@ -61,8 +58,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 .
+
+ cat <<-END_VERSIONS > versions.yml
+ "${task.process}":
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap' is unchanged
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test' is unchanged
diff --git a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
index bf843c60..04fea62a 100644
--- a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
+++ b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
@@ -15,6 +15,22 @@ Changes in 'picard/collectwgsmetrics/main.nf':
path intervallist
output:
+@@ -31,6 +29,7 @@
+ avail_mem = (task.memory.mega*0.8).intValue()
+ }
+ """
++ export TMP=\$PWD
+ picard \\
+ -Xmx${avail_mem}M \\
+ CollectWgsMetrics \\
+@@ -38,6 +37,7 @@
+ --INPUT $bam \\
+ --OUTPUT ${prefix}.CollectWgsMetrics.coverage_metrics \\
+ --REFERENCE_SEQUENCE ${fasta} \\
++ --TMP_DIR . \\
+ $interval
+
+
'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap' is unchanged
'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test' is unchanged
From 32604dc4b2eafd1735e2a57d738c48f91418a4b3 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 12:26:28 +0100
Subject: [PATCH 183/228] fix snapshot
---
tests/workflows/preprocessing.nf.test.snap | 36 ++++++++++++++++------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 0bdfd83c..d40bc343 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -44,6 +44,12 @@
],
"demultiplex_reports": [
+ ],
+ "falco_html": [
+
+ ],
+ "falco_txt": [
+
],
"fastp_html": [
[
@@ -394,7 +400,7 @@
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -670,9 +676,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-23T13:59:59.404732"
+ "timestamp": "2026-02-11T12:00:40.443933"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -719,6 +725,12 @@
],
"demultiplex_reports": [
+ ],
+ "falco_html": [
+
+ ],
+ "falco_txt": [
+
],
"fastp_html": [
[
@@ -853,7 +865,7 @@
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -1019,9 +1031,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-23T14:06:35.503463"
+ "timestamp": "2026-02-11T12:11:20.398961"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1067,6 +1079,12 @@
],
"demultiplex_reports": [
+ ],
+ "falco_html": [
+
+ ],
+ "falco_txt": [
+
],
"fastp_html": [
[
@@ -1336,7 +1354,7 @@
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -1604,8 +1622,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-23T14:04:00.643521"
+ "timestamp": "2026-02-11T12:06:12.331519"
}
}
\ No newline at end of file
From fbe585296220819e4b9bb2636e8342c5abe6a9ec Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 14:08:18 +0100
Subject: [PATCH 184/228] fix coverage issues
---
conf/modules.config | 6 +--
subworkflows/local/coverage/main.nf | 17 +++++----
tests/config/igenomes_test.config | 14 +++----
.../subworkflows/local/coverage/main.nf.test | 10 ++---
.../local/coverage/main.nf.test.snap | 38 +++++++++++++++----
workflows/preprocessing.nf | 3 +-
6 files changed, 55 insertions(+), 33 deletions(-)
diff --git a/conf/modules.config b/conf/modules.config
index 03f7047a..0c65d04c 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -90,9 +90,7 @@ process {
cpus = 16
memory = 32.GB
ext.args = {
- [
- meta.readgroup ? "--RGSM \"@RG\\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\\t") + "\"" : ""
- ].join(" ").trim()
+ [meta.readgroup ? "--RGSM \"@RG\\t" + meta.readgroup.findResults { rg -> rg.value?.trim() ? "${rg.key}:${rg.value}" : null }.join("\\t") + "\"" : ""].join(" ").trim()
}
ext.args2 = "--fast"
}
@@ -307,5 +305,5 @@ env {
MOSDEPTH_Q2 = 'CALLABLE'
// Set TMPDIR for all modules
- TMPDIR = "$PWD"
+ TMPDIR = "\$PWD"
}
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index ccbf27ad..5f9637d7 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -13,7 +13,6 @@ workflow COVERAGE {
main:
ch_versions = channel.empty()
- ch_coverageqc_files = channel.empty()
MOSDEPTH(
ch_meta_cram_crai_fasta_fai_roi.map { meta, cram, crai, fasta, _fai, roi ->
@@ -26,15 +25,19 @@ workflow COVERAGE {
return [meta, cram, crai, fasta, fai]
}
)
- ch_coverageqc_files = ch_coverageqc_files.merge(SAMTOOLS_COVERAGE.out.coverage)
+ ch_versions = ch_versions.mix(SAMTOOLS_COVERAGE.out.versions.first())
PANELCOVERAGE(
- MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
+ MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists)
+ .view()
+ .map { meta, bed, index, genelists ->
// Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
- def genelists_array = genelists !instanceof List ? [genelists] : genelists
+ if (genelists !instanceof List) {
+ genelists = [genelists]
+ }
def filtered_genelists = meta.tag.toLowerCase() == "seqcap"
- ? genelists_array.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
- : genelists_array.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
+ ? genelists.findAll { genelist -> genelist.name.toLowerCase().contains("seqcap") }
+ : genelists.findAll { genelist -> !genelist.name.toLowerCase().contains("seqcap") }
if (filtered_genelists.size() > 0) {
return [
@@ -46,7 +49,7 @@ workflow COVERAGE {
}
}
)
- ch_coverageqc_files = ch_coverageqc_files.mix(PANELCOVERAGE.out.regiondist)
+ ch_versions = ch_versions.mix(PANELCOVERAGE.out.versions.first())
emit:
mosdepth_global = MOSDEPTH.out.global_txt
diff --git a/tests/config/igenomes_test.config b/tests/config/igenomes_test.config
index 74154eec..cac18b9e 100644
--- a/tests/config/igenomes_test.config
+++ b/tests/config/igenomes_test.config
@@ -1,15 +1,15 @@
params {
genomes {
GRCh38 {
- bwamem = "s3://test-data/genomics/homo_sapiens/genome/bwa/"
- dict = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict"
- fai = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai"
- fasta = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
- star = "s3://test-data/genomics/homo_sapiens/genome/star/"
- gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
+ bwamem = "s3://test-data/genomics/homo_sapiens/genome/bwa/"
+ dict = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.dict"
+ fai = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna.fai"
+ fasta = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
+ star = "s3://test-data/genomics/homo_sapiens/genome/star/"
+ gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
+ genelists = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
}
}
- genelists = null
}
aws {
diff --git a/tests/subworkflows/local/coverage/main.nf.test b/tests/subworkflows/local/coverage/main.nf.test
index 8792b87c..7b90545d 100644
--- a/tests/subworkflows/local/coverage/main.nf.test
+++ b/tests/subworkflows/local/coverage/main.nf.test
@@ -23,9 +23,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- input[1] = Channel.value([
- file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/genelists/genelist_chr21_per_exon.bed",checkIfExists:true)
- ])
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
+ input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
@@ -52,9 +51,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- input[1] = Channel.value([
- file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/genelists/genelist_chr21_per_exon.bed",checkIfExists:true)
- ])
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
+ input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
diff --git a/tests/subworkflows/local/coverage/main.nf.test.snap b/tests/subworkflows/local/coverage/main.nf.test.snap
index 4df77336..7bd91330 100644
--- a/tests/subworkflows/local/coverage/main.nf.test.snap
+++ b/tests/subworkflows/local/coverage/main.nf.test.snap
@@ -45,7 +45,10 @@
"single_end": false,
"tag": "WES"
},
- "test_genelist_chr21_per_exon.mosdepth.region.dist.txt:md5,e5c7b4f381721888249c57aa55be2d34"
+ [
+ "test_Treatable_ID_per_exon.mosdepth.region.dist.txt:md5,6c2b5237d98e0a2f118a3553c2ba478e",
+ "test_bladder_cancer_per_exon.mosdepth.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"14": [
@@ -232,7 +235,10 @@
"single_end": false,
"tag": "WES"
},
- "test_genelist_chr21_per_exon.mosdepth.region.dist.txt:md5,e5c7b4f381721888249c57aa55be2d34"
+ [
+ "test_Treatable_ID_per_exon.mosdepth.region.dist.txt:md5,6c2b5237d98e0a2f118a3553c2ba478e",
+ "test_bladder_cancer_per_exon.mosdepth.region.dist.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
]
],
"samtools_coverage": [
@@ -254,9 +260,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-09T12:02:48.263146"
+ "timestamp": "2026-02-11T14:05:13.106828"
},
"Coverage - seqcap": {
"content": [
@@ -298,10 +304,18 @@
]
],
"13": [
-
+ [
+ {
+ "id": "test",
+ "single_end": false,
+ "tag": "seqcap"
+ },
+ "test_seqcap_Connective_tissue_per_exon.mosdepth.region.dist.txt:md5,e098c901acb1da8c2cf64a248306e71c"
+ ]
],
"14": [
"versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
+ "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
"versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
],
"2": [
@@ -477,7 +491,14 @@
],
"panelcoverage": [
-
+ [
+ {
+ "id": "test",
+ "single_end": false,
+ "tag": "seqcap"
+ },
+ "test_seqcap_Connective_tissue_per_exon.mosdepth.region.dist.txt:md5,e098c901acb1da8c2cf64a248306e71c"
+ ]
],
"samtools_coverage": [
[
@@ -491,14 +512,15 @@
],
"versions": [
"versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
+ "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
"versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-09T12:02:26.604953"
+ "timestamp": "2026-02-11T13:54:02.513877"
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 541f0359..b1ca0220 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -54,7 +54,8 @@ workflow PREPROCESSING {
error("Unable to determine input type, please check inputs")
}
.set { ch_inputs_from_samplesheet }
- genelists = genelists ? channel.value(file(genelists + "/*.bed", checkIfExists: true)) : channel.empty()
+ // construct a value channel containing an array of files, because the coverage subworkflow expects a channel of arrays of genelist files (to allow for multiple genelist files per sample)
+ ch_genelists = genelists ? channel.fromPath(genelists).collect().map { files -> [ files ] } : channel.empty()
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From e0e95915aff55dffb6f74aa75409e9bee71ad88a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 18:05:33 +0100
Subject: [PATCH 185/228] fix genelist path parsing
---
tests/subworkflows/local/coverage/main.nf.test | 8 ++++----
workflows/preprocessing.nf | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tests/subworkflows/local/coverage/main.nf.test b/tests/subworkflows/local/coverage/main.nf.test
index 7b90545d..c13bd512 100644
--- a/tests/subworkflows/local/coverage/main.nf.test
+++ b/tests/subworkflows/local/coverage/main.nf.test
@@ -23,8 +23,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
- input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists"
+ input[1] = channel.fromPath(genelists_path + "/*.bed").collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
@@ -51,8 +51,8 @@ nextflow_workflow {
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true),
])
// genelists
- def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
- input[1] = channel.fromPath(genelists_path).collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
+ def genelists_path = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists"
+ input[1] = channel.fromPath(genelists_path + "/*.bed").collect().map{ files -> [ files ] }.ifEmpty { channel.empty() }
"""
}
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index b1ca0220..3cdcc9c1 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -55,7 +55,7 @@ workflow PREPROCESSING {
}
.set { ch_inputs_from_samplesheet }
// construct a value channel containing an array of files, because the coverage subworkflow expects a channel of arrays of genelist files (to allow for multiple genelist files per sample)
- ch_genelists = genelists ? channel.fromPath(genelists).collect().map { files -> [ files ] } : channel.empty()
+ ch_genelists = genelists ? channel.fromPath(genelists + "/*.bed").collect().map { files -> [ files ] } : channel.empty()
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From 8d2580e5b15b41840f6aed00628e980c03f0c568 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 15:20:21 +0100
Subject: [PATCH 186/228] deprecate global analysis params in favor of per
sample settings
---
modules/nf-core/picard/collectmultiplemetrics/main.nf | 3 ++-
workflows/preprocessing.nf | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index 28d8eaa0..d6e200f9 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -39,7 +39,8 @@ process PICARD_COLLECTMULTIPLEMETRICS {
--OUTPUT ${prefix}.CollectMultipleMetrics \\
$intervals_cmd \\
--TMP_DIR . \\
- $reference_cmd
+ $reference_cmd \\
+ $intervals_cmd
"""
stub:
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 3cdcc9c1..f93c2d09 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -251,7 +251,7 @@ workflow PREPROCESSING {
)
ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics)
- /*
+/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: COVERAGE ANALYSIS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From c238ce4741d22b904e72dceb5a8a5566584b6a25 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Mon, 9 Feb 2026 15:51:55 +0100
Subject: [PATCH 187/228] nextflow lint
---
workflows/preprocessing.nf | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index f93c2d09..274c2013 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -258,7 +258,7 @@ workflow PREPROCESSING {
*/
FASTQ_TO_CRAM.out.cram_crai
.filter { meta, _cram, _crai ->
- meta.run_coverage && meta.run_coverage.toBoolean()
+ meta.run_coverage.toBoolean()
}
.map { meta, cram, crai ->
return [
@@ -424,20 +424,20 @@ workflow PREPROCESSING {
rna_junctions = FASTQ_TO_CRAM.out.rna_junctions
align_reports = FASTQ_TO_CRAM.out.align_reports
sormadup_metrics = FASTQ_TO_CRAM.out.sormadup_metrics
- mosdepth_global = mosdepth_global_out
- mosdepth_summary = mosdepth_summary_out
- mosdepth_regions = mosdepth_regions_out
- mosdepth_per_base_d4 = mosdepth_per_base_d4_out
- mosdepth_per_base_bed = mosdepth_per_base_bed_out
- mosdepth_per_base_csi = mosdepth_per_base_csi_out
- mosdepth_regions_bed = mosdepth_regions_bed_out
- mosdepth_regions_csi = mosdepth_regions_csi_out
- mosdepth_quantized_bed = mosdepth_quantized_bed_out
- mosdepth_quantized_csi = mosdepth_quantized_csi_out
- mosdepth_thresholds_bed = mosdepth_thresholds_bed_out
- mosdepth_thresholds_csi = mosdepth_thresholds_csi_out
- samtools_coverage = samtools_coverage_out
- panelcoverage = panelcoverage_out
+ mosdepth_global = COVERAGE.out.mosdepth_global
+ mosdepth_summary = COVERAGE.out.mosdepth_summary
+ mosdepth_regions = COVERAGE.out.mosdepth_regions
+ mosdepth_per_base_d4 = COVERAGE.out.mosdepth_per_base_d4
+ mosdepth_per_base_bed = COVERAGE.out.mosdepth_per_base_bed
+ mosdepth_per_base_csi = COVERAGE.out.mosdepth_per_base_csi
+ mosdepth_regions_bed = COVERAGE.out.mosdepth_regions_bed
+ mosdepth_regions_csi = COVERAGE.out.mosdepth_regions_csi
+ mosdepth_quantized_bed = COVERAGE.out.mosdepth_quantized_bed
+ mosdepth_quantized_csi = COVERAGE.out.mosdepth_quantized_csi
+ mosdepth_thresholds_bed = COVERAGE.out.mosdepth_thresholds_bed
+ mosdepth_thresholds_csi = COVERAGE.out.mosdepth_thresholds_csi
+ samtools_coverage = COVERAGE.out.samtools_coverage
+ panelcoverage = COVERAGE.out.panelcoverage
samtools_stats = BAM_QC.out.samtools_stats
samtools_flagstat = BAM_QC.out.samtools_flagstat
samtools_idxstats = BAM_QC.out.samtools_idxstats
From d9ab5efeb06c45d595f6340f063bc6f48780b6a2 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 12:24:01 +0100
Subject: [PATCH 188/228] nextflow lint entire pipeline
---
subworkflows/local/bam_qc/main.nf | 1 -
subworkflows/local/coverage/main.nf | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index d6e1c8bd..d9cd0f7c 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -52,7 +52,6 @@ workflow BAM_QC {
PICARD_COLLECTHSMETRICS(ch_picard_coverage.hsmetrics)
ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
- ch_picard_hsmetrics = PICARD_COLLECTHSMETRICS.out.metrics
emit:
samtools_stats = SAMTOOLS_STATS.out.stats
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 5f9637d7..0f9a42d3 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -66,4 +66,5 @@ workflow COVERAGE {
mosdepth_thresholds_csi = MOSDEPTH.out.thresholds_csi
samtools_coverage = SAMTOOLS_COVERAGE.out.coverage
panelcoverage = PANELCOVERAGE.out.regiondist
+ versions = ch_versions
}
From 92cb905b1c60e255c309e318d52242795257e931 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 19:36:06 +0100
Subject: [PATCH 189/228] bump picard/collectmultiplemetrics module
---
modules/nf-core/picard/collectmultiplemetrics/main.nf | 1 -
1 file changed, 1 deletion(-)
diff --git a/modules/nf-core/picard/collectmultiplemetrics/main.nf b/modules/nf-core/picard/collectmultiplemetrics/main.nf
index d6e200f9..11b00464 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/main.nf
+++ b/modules/nf-core/picard/collectmultiplemetrics/main.nf
@@ -37,7 +37,6 @@ process PICARD_COLLECTMULTIPLEMETRICS {
$args \\
--INPUT $bam \\
--OUTPUT ${prefix}.CollectMultipleMetrics \\
- $intervals_cmd \\
--TMP_DIR . \\
$reference_cmd \\
$intervals_cmd
From 068421893213f5fd23c549c2d81d5806d70b61a9 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Tue, 10 Feb 2026 20:35:15 +0100
Subject: [PATCH 190/228] more topic work
---
subworkflows/local/coverage/main.nf | 1 -
1 file changed, 1 deletion(-)
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 0f9a42d3..5f9637d7 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -66,5 +66,4 @@ workflow COVERAGE {
mosdepth_thresholds_csi = MOSDEPTH.out.thresholds_csi
samtools_coverage = SAMTOOLS_COVERAGE.out.coverage
panelcoverage = PANELCOVERAGE.out.regiondist
- versions = ch_versions
}
From a9323bbbe51b5a0bea69a56f84d10290861b9c43 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 18:56:31 +0100
Subject: [PATCH 191/228] lint (again)
---
subworkflows/local/coverage/main.nf | 4 +-
subworkflows/nf-core/bcl_demultiplex/main.nf | 141 ++++++-------
.../bcl_demultiplex/tests/nextflow.config | 13 +-
.../nf-core/utils_nextflow_pipeline/main.nf | 22 +-
.../nf-core/utils_nfcore_pipeline/main.nf | 198 +++++++++---------
.../tests/nextflow.config | 2 +-
.../nf-core/utils_nfschema_plugin/main.nf | 49 ++---
.../tests/nextflow.config | 2 +-
workflows/preprocessing.nf | 6 +-
9 files changed, 215 insertions(+), 222 deletions(-)
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 5f9637d7..ca70e40a 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -28,9 +28,7 @@ workflow COVERAGE {
ch_versions = ch_versions.mix(SAMTOOLS_COVERAGE.out.versions.first())
PANELCOVERAGE(
- MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists)
- .view()
- .map { meta, bed, index, genelists ->
+ MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).view().map { meta, bed, index, genelists ->
// Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
if (genelists !instanceof List) {
genelists = [genelists]
diff --git a/subworkflows/nf-core/bcl_demultiplex/main.nf b/subworkflows/nf-core/bcl_demultiplex/main.nf
index bfe1ae83..fefa3af3 100644
--- a/subworkflows/nf-core/bcl_demultiplex/main.nf
+++ b/subworkflows/nf-core/bcl_demultiplex/main.nf
@@ -9,66 +9,64 @@ include { BCL2FASTQ } from "../../../modules/nf-core/bcl2fastq/main"
workflow BCL_DEMULTIPLEX {
take:
- ch_flowcell // [[id:"", lane:""], samplesheet.csv, path/to/bcl/files]
- demultiplexer // bclconvert or bcl2fastq
+ ch_flowcell // [[id:"", lane:""], samplesheet.csv, path/to/bcl/files]
+ demultiplexer // bclconvert or bcl2fastq
main:
- ch_versions = channel.empty()
- ch_fastq = channel.empty()
- ch_reports = channel.empty()
- ch_stats = channel.empty()
- ch_interop = channel.empty()
- ch_logs = channel.empty()
+ ch_versions = channel.empty()
+ ch_fastq = channel.empty()
+ ch_reports = channel.empty()
+ ch_stats = channel.empty()
+ ch_interop = channel.empty()
+ ch_logs = channel.empty()
- // Split flowcells into separate channels containing run as tar and run as path
- // https://nextflow.slack.com/archives/C02T98A23U7/p1650963988498929
- ch_flowcell
- .branch { _meta, _samplesheet, run ->
- tar: run.toString().endsWith(".tar.gz")
- dir: true
- }.set { ch_flowcells }
+ // Split flowcells into separate channels containing run as tar and run as path
+ // https://nextflow.slack.com/archives/C02T98A23U7/p1650963988498929
+ ch_flowcell
+ .branch { _meta, _samplesheet, run ->
+ tar: run.toString().endsWith(".tar.gz")
+ dir: true
+ }
+ .set { ch_flowcells }
- ch_flowcells.tar
- .multiMap { meta, samplesheet, run ->
- samplesheets: [ meta, samplesheet ]
- run_dirs: [ meta, run ]
- }.set { ch_flowcells_tar }
+ ch_flowcells.tar
+ .multiMap { meta, samplesheet, run ->
+ samplesheets: [meta, samplesheet]
+ run_dirs: [meta, run]
+ }
+ .set { ch_flowcells_tar }
- // Runs when run_dir is a tar archive
- // Re-join the metadata and the untarred run directory with the samplesheet
- ch_flowcells_tar_merged = ch_flowcells_tar
- .samplesheets
- .join( ch_flowcells_tar.run_dirs )
+ // Runs when run_dir is a tar archive
+ // Re-join the metadata and the untarred run directory with the samplesheet
+ ch_flowcells_tar_merged = ch_flowcells_tar.samplesheets.join(ch_flowcells_tar.run_dirs)
- // Merge the two channels back together
- ch_flowcells = ch_flowcells.dir.mix(ch_flowcells_tar_merged)
+ // Merge the two channels back together
+ ch_flowcells = ch_flowcells.dir.mix(ch_flowcells_tar_merged)
- // MODULE: bclconvert
- // Demultiplex the bcl files
- if (demultiplexer == "bclconvert") {
- BCLCONVERT( ch_flowcells )
- ch_fastq = ch_fastq.mix(BCLCONVERT.out.fastq)
- ch_interop = ch_interop.mix(BCLCONVERT.out.interop)
- ch_reports = ch_reports.mix(BCLCONVERT.out.reports)
- ch_logs = ch_logs.mix(BCLCONVERT.out.logs)
- ch_versions = ch_versions.mix(BCLCONVERT.out.versions.first())
- }
+ // MODULE: bclconvert
+ // Demultiplex the bcl files
+ if (demultiplexer == "bclconvert") {
+ BCLCONVERT(ch_flowcells)
+ ch_fastq = ch_fastq.mix(BCLCONVERT.out.fastq)
+ ch_interop = ch_interop.mix(BCLCONVERT.out.interop)
+ ch_reports = ch_reports.mix(BCLCONVERT.out.reports)
+ ch_logs = ch_logs.mix(BCLCONVERT.out.logs)
+ ch_versions = ch_versions.mix(BCLCONVERT.out.versions.first())
+ }
- // MODULE: bcl2fastq
- // Demultiplex the bcl files
- if (demultiplexer == "bcl2fastq") {
- BCL2FASTQ( ch_flowcells )
- ch_fastq = ch_fastq.mix(BCL2FASTQ.out.fastq)
- ch_interop = ch_interop.mix(BCL2FASTQ.out.interop)
- ch_reports = ch_reports.mix(BCL2FASTQ.out.reports)
- ch_stats = ch_stats.mix(BCL2FASTQ.out.stats)
- ch_versions = ch_versions.mix(BCL2FASTQ.out.versions.first())
- }
+ // MODULE: bcl2fastq
+ // Demultiplex the bcl files
+ if (demultiplexer == "bcl2fastq") {
+ BCL2FASTQ(ch_flowcells)
+ ch_fastq = ch_fastq.mix(BCL2FASTQ.out.fastq)
+ ch_interop = ch_interop.mix(BCL2FASTQ.out.interop)
+ ch_reports = ch_reports.mix(BCL2FASTQ.out.reports)
+ ch_stats = ch_stats.mix(BCL2FASTQ.out.stats)
+ ch_versions = ch_versions.mix(BCL2FASTQ.out.versions.first())
+ }
- // Generate meta for each fastq
- ch_fastq
- // reshapes the channel from a single emit of [meta, [fastq, fastq, fastq...]]
- // to emits per fastq file like [meta, fastq]
+ // Generate meta for each fastq
+ ch_fastq
.transpose()
.map { fc_meta, fastq ->
def meta = [:]
@@ -86,7 +84,7 @@ workflow BCL_DEMULTIPLEX {
line = buffered.readLine()
buffered.close()
}
- if ( line != null && line.startsWith('@') ) {
+ if (line != null && line.startsWith('@')) {
line = line.substring(1)
// expected format is like:
// xx:yy:FLOWCELLID:LANE:... (seven fields)
@@ -95,45 +93,40 @@ workflow BCL_DEMULTIPLEX {
// "@::::::: :::"
//def sequencer_serial = fields[0]
//def run_nubmer = fields[1]
- def fcid = fields[2]
- def lane = fields[3]
- def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
+ def fcid = fields[2]
+ def lane = fields[3]
+ def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
def ID = [fcid, lane].join(".")
def PU = [fcid, lane, index].findAll().join(".")
def PL = "ILLUMINA"
def SM = fastq.getSimpleName().toString() - ~/_S[0-9]+.*$/
- meta.readgroup = [
- "ID": ID,
- "SM": SM,
- "PL": PL,
- "PU": PU
- ]
+ meta.readgroup = ["ID": ID, "SM": SM, "PL": PL, "PU": PU]
meta.empty = false
- } else {
- println "No reads were found in FASTQ file: ${fastq}"
+ }
+ else {
+ println("No reads were found in FASTQ file: ${fastq}")
meta.readgroup = [:]
meta.empty = true
}
return [meta, fastq]
}
- // Group by the meta id so that we can find mate pairs if they exist
.groupTuple(by: [0])
.map { meta, fastq ->
meta.single_end = fastq.size() == 1
return [meta, fastq.flatten()]
}
.branch { meta, _fastq ->
- fastq : meta.empty == false
- empty_fastq : meta.empty == true
+ fastq: meta.empty == false
+ empty_fastq: meta.empty == true
}
- .set{ch_fastq_with_meta}
+ .set { ch_fastq_with_meta }
emit:
- fastq = ch_fastq_with_meta.fastq
- empty_fastq = ch_fastq_with_meta.empty_fastq
- reports = ch_reports
- stats = ch_stats
- interop = ch_interop
- logs = ch_logs
- versions = ch_versions
+ fastq = ch_fastq_with_meta.fastq
+ empty_fastq = ch_fastq_with_meta.empty_fastq
+ reports = ch_reports
+ stats = ch_stats
+ interop = ch_interop
+ logs = ch_logs
+ versions = ch_versions
}
diff --git a/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config b/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
index dd8bfa2a..555a2ec7 100644
--- a/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
+++ b/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
@@ -1,13 +1,12 @@
process {
withName: BCLCONVERT {
- ext.args = {[
- meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
- "--force"
- ].join(" ").trim()}
+ ext.args = {
+ [meta.lane ? "--bcl-only-lane ${meta.lane}" : "", "--force"].join(" ").trim()
+ }
}
withName: BCL2FASTQ {
- ext.args = {[
- "--tiles s_1_1101"
- ].join(" ").trim()}
+ ext.args = {
+ ["--tiles s_1_1101"].join(" ").trim()
+ }
}
}
diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
index d6e593e8..7049caef 100644
--- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
@@ -10,9 +10,9 @@
workflow UTILS_NEXTFLOW_PIPELINE {
take:
- print_version // boolean: print version
- dump_parameters // boolean: dump parameters
- outdir // path: base directory used to publish pipeline results
+ print_version // boolean: print version
+ dump_parameters // boolean: dump parameters
+ outdir // path: base directory used to publish pipeline results
check_conda_channels // boolean: check conda channels
main:
@@ -72,10 +72,10 @@ def getWorkflowVersion() {
//
def dumpParametersToJSON(outdir) {
def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')
- def filename = "params_${timestamp}.json"
- def temp_pf = new File(workflow.launchDir.toString(), ".${filename}")
- def jsonStr = groovy.json.JsonOutput.toJson(params)
- temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr)
+ def filename = "params_${timestamp}.json"
+ def temp_pf = new File(workflow.launchDir.toString(), ".${filename}")
+ def jsonStr = groovy.json.JsonOutput.toJson(params)
+ temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr)
nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json")
temp_pf.delete()
@@ -91,12 +91,12 @@ def checkCondaChannels() {
def config = parser.load("conda config --show channels".execute().text)
channels = config.channels
}
- catch (NullPointerException e) {
+ catch (e: NullPointerException) {
log.debug(e)
log.warn("Could not verify conda channel configuration.")
return null
}
- catch (IOException e) {
+ catch (e: IOException) {
log.debug(e)
log.warn("Could not verify conda channel configuration.")
return null
@@ -111,7 +111,8 @@ def checkCondaChannels() {
def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order }
if (channels_missing | channel_priority_violation) {
- log.warn """\
+ log.warn(
+ """\
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There is a problem with your Conda configuration!
You will need to set-up the conda-forge and bioconda channels correctly.
@@ -122,5 +123,6 @@ def checkCondaChannels() {
${required_channels_in_order}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
""".stripIndent(true)
+ )
}
}
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
index 2f30e9a4..cf586322 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
@@ -125,12 +125,12 @@ def paramsSummaryMultiqc(summary_params) {
}
def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String
- yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n"
- yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n"
- yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n"
- yaml_file_text += "plot_type: 'html'\n"
- yaml_file_text += "data: |\n"
- yaml_file_text += "${summary_section}"
+ yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n"
+ yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n"
+ yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n"
+ yaml_file_text += "plot_type: 'html'\n"
+ yaml_file_text += "data: |\n"
+ yaml_file_text += "${summary_section}"
return yaml_file_text
}
@@ -138,67 +138,67 @@ def paramsSummaryMultiqc(summary_params) {
//
// ANSII colours used for terminal logging
//
-def logColours(monochrome_logs=true) {
+def logColours(monochrome_logs = true) {
def colorcodes = [:] as Map
// Reset / Meta
- colorcodes['reset'] = monochrome_logs ? '' : "\033[0m"
- colorcodes['bold'] = monochrome_logs ? '' : "\033[1m"
- colorcodes['dim'] = monochrome_logs ? '' : "\033[2m"
+ colorcodes['reset'] = monochrome_logs ? '' : "\033[0m"
+ colorcodes['bold'] = monochrome_logs ? '' : "\033[1m"
+ colorcodes['dim'] = monochrome_logs ? '' : "\033[2m"
colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m"
- colorcodes['blink'] = monochrome_logs ? '' : "\033[5m"
- colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m"
- colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m"
+ colorcodes['blink'] = monochrome_logs ? '' : "\033[5m"
+ colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m"
+ colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m"
// Regular Colors
- colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m"
- colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m"
- colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m"
+ colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m"
+ colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m"
+ colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m"
colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m"
- colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m"
+ colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m"
colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m"
- colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m"
- colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m"
+ colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m"
+ colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m"
// Bold
- colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m"
- colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m"
- colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m"
+ colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m"
+ colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m"
+ colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m"
colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m"
- colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m"
+ colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m"
colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m"
- colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m"
- colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m"
+ colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m"
+ colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m"
// Underline
- colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m"
- colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m"
- colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m"
+ colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m"
+ colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m"
+ colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m"
colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m"
- colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m"
+ colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m"
colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m"
- colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m"
- colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m"
+ colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m"
+ colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m"
// High Intensity
- colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m"
- colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m"
- colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m"
+ colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m"
+ colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m"
+ colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m"
colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m"
- colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m"
+ colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m"
colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m"
- colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m"
- colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m"
+ colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m"
+ colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m"
// Bold High Intensity
- colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m"
- colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m"
- colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m"
+ colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m"
+ colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m"
+ colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m"
colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m"
- colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m"
+ colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m"
colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m"
- colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m"
- colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m"
+ colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m"
+ colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m"
return colorcodes
}
@@ -208,17 +208,21 @@ def logColours(monochrome_logs=true) {
def getSingleReport(multiqc_reports) {
if (multiqc_reports instanceof Path) {
return multiqc_reports
- } else if (multiqc_reports instanceof List) {
+ }
+ else if (multiqc_reports instanceof List) {
if (multiqc_reports.size() == 0) {
log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'")
return null
- } else if (multiqc_reports.size() == 1) {
+ }
+ else if (multiqc_reports.size() == 1) {
return multiqc_reports.first()
- } else {
+ }
+ else {
log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one")
return multiqc_reports.first()
}
- } else {
+ }
+ else {
return null
}
}
@@ -226,7 +230,7 @@ def getSingleReport(multiqc_reports) {
//
// Construct and send completion email
//
-def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) {
+def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs = true, multiqc_report = null) {
// Set up the e-mail variables
def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}"
@@ -243,35 +247,35 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
}
def misc_fields = [:]
- misc_fields['Date Started'] = workflow.start
- misc_fields['Date Completed'] = workflow.complete
+ misc_fields['Date Started'] = workflow.start
+ misc_fields['Date Completed'] = workflow.complete
misc_fields['Pipeline script file path'] = workflow.scriptFile
- misc_fields['Pipeline script hash ID'] = workflow.scriptId
+ misc_fields['Pipeline script hash ID'] = workflow.scriptId
if (workflow.repository) {
- misc_fields['Pipeline repository Git URL'] = workflow.repository
+ misc_fields['Pipeline repository Git URL'] = workflow.repository
}
if (workflow.commitId) {
misc_fields['Pipeline repository Git Commit'] = workflow.commitId
}
if (workflow.revision) {
- misc_fields['Pipeline Git branch/tag'] = workflow.revision
+ misc_fields['Pipeline Git branch/tag'] = workflow.revision
}
- misc_fields['Nextflow Version'] = workflow.nextflow.version
- misc_fields['Nextflow Build'] = workflow.nextflow.build
+ misc_fields['Nextflow Version'] = workflow.nextflow.version
+ misc_fields['Nextflow Build'] = workflow.nextflow.build
misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp
def email_fields = [:]
- email_fields['version'] = getWorkflowVersion()
- email_fields['runName'] = workflow.runName
- email_fields['success'] = workflow.success
+ email_fields['version'] = getWorkflowVersion()
+ email_fields['runName'] = workflow.runName
+ email_fields['success'] = workflow.success
email_fields['dateComplete'] = workflow.complete
- email_fields['duration'] = workflow.duration
- email_fields['exitStatus'] = workflow.exitStatus
+ email_fields['duration'] = workflow.duration
+ email_fields['exitStatus'] = workflow.exitStatus
email_fields['errorMessage'] = (workflow.errorMessage ?: 'None')
- email_fields['errorReport'] = (workflow.errorReport ?: 'None')
- email_fields['commandLine'] = workflow.commandLine
- email_fields['projectDir'] = workflow.projectDir
- email_fields['summary'] = summary << misc_fields
+ email_fields['errorReport'] = (workflow.errorReport ?: 'None')
+ email_fields['commandLine'] = workflow.commandLine
+ email_fields['projectDir'] = workflow.projectDir
+ email_fields['summary'] = summary << misc_fields
// On success try attach the multiqc report
def mqc_report = getSingleReport(multiqc_report)
@@ -283,22 +287,22 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
}
// Render the TXT template
- def engine = new groovy.text.GStringTemplateEngine()
- def tf = new File("${workflow.projectDir}/assets/email_template.txt")
+ def engine = new groovy.text.GStringTemplateEngine()
+ def tf = new File("${workflow.projectDir}/assets/email_template.txt")
def txt_template = engine.createTemplate(tf).make(email_fields)
- def email_txt = txt_template.toString()
+ def email_txt = txt_template.toString()
// Render the HTML template
- def hf = new File("${workflow.projectDir}/assets/email_template.html")
+ def hf = new File("${workflow.projectDir}/assets/email_template.html")
def html_template = engine.createTemplate(hf).make(email_fields)
- def email_html = html_template.toString()
+ def email_html = html_template.toString()
// Render the sendmail template
def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit
- def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()]
- def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt")
- def sendmail_template = engine.createTemplate(sf).make(smail_fields)
- def sendmail_html = sendmail_template.toString()
+ def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()]
+ def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt")
+ def sendmail_template = engine.createTemplate(sf).make(smail_fields)
+ def sendmail_html = sendmail_template.toString()
// Send the HTML e-mail
def colors = logColours(monochrome_logs) as Map
@@ -313,7 +317,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
['sendmail', '-t'].execute() << sendmail_html
log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-")
}
- catch (Exception msg) {
+ catch (msg: Exception) {
log.debug(msg.toString())
log.debug("Trying with mail instead of sendmail")
// Catch failures and try with plaintext
@@ -339,7 +343,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
//
// Print pipeline summary on completion
//
-def completionSummary(monochrome_logs=true) {
+def completionSummary(monochrome_logs = true) {
def colors = logColours(monochrome_logs) as Map
if (workflow.success) {
if (workflow.stats.ignoredCount == 0) {
@@ -367,44 +371,44 @@ def imNotification(summary_params, hook_url) {
}
def misc_fields = [:]
- misc_fields['start'] = workflow.start
- misc_fields['complete'] = workflow.complete
- misc_fields['scriptfile'] = workflow.scriptFile
- misc_fields['scriptid'] = workflow.scriptId
+ 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
+ misc_fields['commitid'] = workflow.commitId
}
if (workflow.revision) {
- misc_fields['revision'] = 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
+ 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['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['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
+ 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()
+ 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_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()
+ def json_message = json_template.toString()
// POST
def post = new URL(hook_url).openConnection()
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config
index d0a926bf..a09572e5 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config
@@ -3,7 +3,7 @@ manifest {
author = """nf-core"""
homePage = 'https://127.0.0.1'
description = """Dummy pipeline"""
- nextflowVersion = '!>=23.04.0'
+ nextflowVersion = '!>=23.04.0'
version = '9.9.9'
doi = 'https://doi.org/10.5281/zenodo.5070524'
}
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
index 1df8b76f..e2821afd 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf
+++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
@@ -7,25 +7,20 @@ include { validateParameters } from 'plugin/nf-schema'
include { paramsHelp } from 'plugin/nf-schema'
workflow UTILS_NFSCHEMA_PLUGIN {
-
take:
- input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow
- validate_params // boolean: validate the parameters
- parameters_schema // string: path to the parameters JSON schema.
- // this has to be the same as the schema given to `validation.parametersSchema`
- // when this input is empty it will automatically use the configured schema or
- // "${projectDir}/nextflow_schema.json" as default. This input should not be empty
- // for meta pipelines
- help // boolean: show help message
- help_full // boolean: show full help message
- show_hidden // boolean: show hidden parameters in help message
- before_text // string: text to show before the help message and parameters summary
- after_text // string: text to show after the help message and parameters summary
- command // string: an example command of the pipeline
+ input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow
+ validate_params // boolean: validate the parameters
+ parameters_schema // string: path to the parameters JSON schema.
+ help // boolean: show help message
+ help_full // boolean: show full help message
+ show_hidden // boolean: show hidden parameters in help message
+ before_text // string: text to show before the help message and parameters summary
+ after_text // string: text to show after the help message and parameters summary
+ command // string: an example command of the pipeline
main:
- if(help || help_full) {
+ if (help || help_full) {
help_options = [
beforeText: before_text,
afterText: after_text,
@@ -33,14 +28,16 @@ workflow UTILS_NFSCHEMA_PLUGIN {
showHidden: show_hidden,
fullHelp: help_full,
]
- if(parameters_schema) {
+ if (parameters_schema) {
help_options << [parametersSchema: parameters_schema]
}
- log.info paramsHelp(
- help_options,
- (params.help instanceof String && params.help != "true") ? params.help : "",
+ log.info(
+ paramsHelp(
+ help_options,
+ params.help instanceof String && params.help != "true" ? params.help : "",
+ )
)
- exit 0
+ exit(0)
}
//
@@ -49,20 +46,20 @@ workflow UTILS_NFSCHEMA_PLUGIN {
//
summary_options = [:]
- if(parameters_schema) {
+ if (parameters_schema) {
summary_options << [parametersSchema: parameters_schema]
}
- log.info before_text
- log.info paramsSummaryLog(summary_options, input_workflow)
- log.info after_text
+ log.info(before_text)
+ log.info(paramsSummaryLog(summary_options, input_workflow))
+ log.info(after_text)
//
// Validate the parameters using nextflow_schema.json or the schema
// given via the validation.parametersSchema configuration option
//
- if(validate_params) {
+ if (validate_params) {
validateOptions = [:]
- if(parameters_schema) {
+ if (parameters_schema) {
validateOptions << [parametersSchema: parameters_schema]
}
validateParameters(validateOptions)
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
index f6537cc3..c8ce8606 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
@@ -4,5 +4,5 @@ plugins {
validation {
parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json"
- monochromeLogs = true
+ monochromeLogs = true
}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 274c2013..034397f4 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -55,7 +55,7 @@ workflow PREPROCESSING {
}
.set { ch_inputs_from_samplesheet }
// construct a value channel containing an array of files, because the coverage subworkflow expects a channel of arrays of genelist files (to allow for multiple genelist files per sample)
- ch_genelists = genelists ? channel.fromPath(genelists + "/*.bed").collect().map { files -> [ files ] } : channel.empty()
+ ch_genelists = genelists ? channel.fromPath(genelists + "/*.bed").collect().map { files -> [files] } : channel.empty()
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -251,7 +251,7 @@ workflow PREPROCESSING {
)
ch_multiqc_files = ch_multiqc_files.mix(FASTQ_TO_CRAM.out.sormadup_metrics)
-/*
+ /*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP: COVERAGE ANALYSIS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -272,7 +272,7 @@ workflow PREPROCESSING {
}
.set { ch_cram_crai_fasta_fai_roi }
- COVERAGE(ch_cram_crai_fasta_fai_roi, genelists)
+ COVERAGE(ch_cram_crai_fasta_fai_roi, ch_genelists)
ch_multiqc_files = ch_multiqc_files.mix(
COVERAGE.out.mosdepth_summary,
COVERAGE.out.mosdepth_global,
From 53d72df3491fba9d9aa385c5aaf585f0c3121e00 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 19:06:55 +0100
Subject: [PATCH 192/228] nf-core linting
---
modules.json | 4 +-
modules/nf-core/bclconvert/bclconvert.diff | 25 ---
modules/nf-core/bclconvert/main.nf | 4 +-
modules/nf-core/samtools/coverage/meta.yml | 5 -
.../samtools/coverage/samtools-coverage.diff | 5 +-
.../samtools/coverage/tests/main.nf.test | 86 +++-----
.../samtools/coverage/tests/main.nf.test.snap | 56 +----
nextflow.config | 13 +-
subworkflows/local/coverage/main.nf | 2 +-
subworkflows/nf-core/bcl_demultiplex/main.nf | 141 +++++++------
.../bcl_demultiplex/tests/nextflow.config | 13 +-
.../nf-core/utils_nextflow_pipeline/main.nf | 22 +-
.../nf-core/utils_nfcore_pipeline/main.nf | 198 +++++++++---------
.../tests/nextflow.config | 2 +-
.../nf-core/utils_nfschema_plugin/main.nf | 49 +++--
.../tests/nextflow.config | 2 +-
16 files changed, 268 insertions(+), 359 deletions(-)
delete mode 100644 modules/nf-core/bclconvert/bclconvert.diff
diff --git a/modules.json b/modules.json
index a75b44bf..3b6b2674 100644
--- a/modules.json
+++ b/modules.json
@@ -13,7 +13,7 @@
"bclconvert": {
"branch": "master",
"git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
- "installed_by": ["bcl_demultiplex", "modules"],
+ "installed_by": ["bcl_demultiplex"],
"patch": "modules/nf-core/bclconvert/bclconvert.diff"
},
"biobambam/bamsormadup": {
@@ -104,7 +104,7 @@
},
"samtools/coverage": {
"branch": "master",
- "git_sha": "4154ced8a82f5f17b57e48c68dbb03ecb0e9ca14",
+ "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a",
"installed_by": ["modules"],
"patch": "modules/nf-core/samtools/coverage/samtools-coverage.diff"
},
diff --git a/modules/nf-core/bclconvert/bclconvert.diff b/modules/nf-core/bclconvert/bclconvert.diff
deleted file mode 100644
index dc0dee2d..00000000
--- a/modules/nf-core/bclconvert/bclconvert.diff
+++ /dev/null
@@ -1,25 +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
-@@ -12,8 +12,8 @@
- 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") , emit: reports
-- tuple val(meta), path("output/Logs") , 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
- path("versions.yml") , emit: versions
-
-
-'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 db0dac03..f1caafc3 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/*") , emit: reports
- tuple val(meta), path("output/Logs/*") , 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
path("versions.yml") , emit: versions
diff --git a/modules/nf-core/samtools/coverage/meta.yml b/modules/nf-core/samtools/coverage/meta.yml
index 754f5f49..b2262177 100644
--- a/modules/nf-core/samtools/coverage/meta.yml
+++ b/modules/nf-core/samtools/coverage/meta.yml
@@ -41,11 +41,6 @@ input:
description: Reference genome file
pattern: "*.{fa,fasta}"
ontologies: []
- - - meta3:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- fai:
type: file
description: Reference genome index file
diff --git a/modules/nf-core/samtools/coverage/samtools-coverage.diff b/modules/nf-core/samtools/coverage/samtools-coverage.diff
index 5dbbbd9e..fe18381a 100644
--- a/modules/nf-core/samtools/coverage/samtools-coverage.diff
+++ b/modules/nf-core/samtools/coverage/samtools-coverage.diff
@@ -4,13 +4,12 @@ Changes in component 'nf-core/samtools/coverage'
Changes in 'samtools/coverage/main.nf':
--- modules/nf-core/samtools/coverage/main.nf
+++ modules/nf-core/samtools/coverage/main.nf
-@@ -8,9 +8,7 @@
+@@ -8,8 +8,7 @@
'biocontainers/samtools:1.22.1--h96c455f_0' }"
input:
- tuple val(meta), path(input), path(input_index)
-- tuple val(meta2), path(fasta)
-- tuple val(meta3), path(fai)
+- tuple val(meta2), path(fasta), path(fai)
+ tuple val(meta), path(input), path(input_index), path(fasta), path(fai)
output:
diff --git a/modules/nf-core/samtools/coverage/tests/main.nf.test b/modules/nf-core/samtools/coverage/tests/main.nf.test
index ffd36109..c59ba4f8 100644
--- a/modules/nf-core/samtools/coverage/tests/main.nf.test
+++ b/modules/nf-core/samtools/coverage/tests/main.nf.test
@@ -14,19 +14,12 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [:], // meta map
- []
- ])
- input[2] = Channel.of([
- [:], // meta map
- []
- ])
+ ]
+ input[1] = [[], [], []]
"""
}
}
@@ -34,7 +27,7 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
}
@@ -44,19 +37,16 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
- ])
- input[1] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true)
- ])
- input[2] = Channel.of([
- [ id:'fai' ], // meta map
+ ]
+ input[1] = [
+ [ id:'fasta_fai' ],
+ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true)
- ])
+ ]
"""
}
}
@@ -73,19 +63,15 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
- ])
- input[1] = Channel.of([
- [:], // meta map
- []
- ])
- input[2] = Channel.of([
- [ id:'fai' ], // meta map
+ ]
+ input[1] = [
+ [ id:'fai' ], [],
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
- ])
+ ]
"""
}
}
@@ -102,19 +88,16 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true)
- ])
- input[1] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
- input[2] = Channel.of([
- [:], // meta map
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
[]
- ])
+ ]
"""
}
}
@@ -135,19 +118,16 @@ nextflow_process {
when {
process {
"""
- input[0] = Channel.of([
- [id: 'test', single_end: false], // meta map
+ input[0] = [
+ [id: 'test'],
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] = Channel.of([
- [ id:'fasta' ], // meta map
- file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true)
- ])
- input[2] = Channel.of([
- [ id:'fai' ], // meta map
+ ]
+ input[1] = [
+ [ id:'fasta' ],
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true),
file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true)
- ])
+ ]
"""
}
}
@@ -155,7 +135,7 @@ nextflow_process {
then {
assertAll(
{ assert process.success },
- { assert snapshot(process.out).match() }
+ { assert snapshot(sanitizeOutput(process.out)).match() }
)
}
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 2069c8c1..256c6507 100644
--- a/modules/nf-core/samtools/coverage/tests/main.nf.test.snap
+++ b/modules/nf-core/samtools/coverage/tests/main.nf.test.snap
@@ -2,27 +2,10 @@
"test_samtools_coverage_stub": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
- ]
- ],
- "1": [
- [
- "SAMTOOLS_COVERAGE",
- "samtools",
- "1.22.1"
- ]
- ],
"coverage": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
]
@@ -38,34 +21,17 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.3"
},
- "timestamp": "2026-01-22T10:43:34.392105918"
+ "timestamp": "2026-02-10T15:27:27.16473081"
},
"test_samtools_coverage_bam": {
"content": [
{
- "0": [
- [
- {
- "id": "test",
- "single_end": false
- },
- "test.txt:md5,99a521b3bf53b6acf8055a44a571ea84"
- ]
- ],
- "1": [
- [
- "SAMTOOLS_COVERAGE",
- "samtools",
- "1.22.1"
- ]
- ],
"coverage": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.txt:md5,99a521b3bf53b6acf8055a44a571ea84"
]
@@ -81,9 +47,9 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.3"
},
- "timestamp": "2026-01-22T10:43:08.216921812"
+ "timestamp": "2026-02-10T15:27:06.759689511"
},
"test_samtools_coverage_cram": {
"content": [
@@ -91,8 +57,7 @@
"0": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.txt:md5,ce896534bac51cfcc97e5508ae907e99"
]
@@ -107,8 +72,7 @@
"coverage": [
[
{
- "id": "test",
- "single_end": false
+ "id": "test"
},
"test.txt:md5,ce896534bac51cfcc97e5508ae907e99"
]
@@ -124,8 +88,8 @@
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.3"
},
- "timestamp": "2026-01-22T10:43:15.389524183"
+ "timestamp": "2026-02-10T15:27:12.949845604"
}
}
\ No newline at end of file
diff --git a/nextflow.config b/nextflow.config
index 13067b73..d3896216 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -47,20 +47,11 @@ params {
config_profile_name = null
config_profile_description = null
- custom_config_version = 'master'
- custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}"
+ custom_config_version = 'main'
+ custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.custom_config_version}"
config_profile_contact = null
config_profile_url = null
- // CMGG Config options
- cmgg_config_profile_name = null
- cmgg_config_profile_description = null
-
- cmgg_custom_config_version = 'main'
- cmgg_custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.cmgg_custom_config_version}"
- cmgg_config_profile_contact = null
- cmgg_config_profile_url = null
-
// Schema validation default options
validate_params = true
}
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index ca70e40a..82d6cb30 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -28,7 +28,7 @@ workflow COVERAGE {
ch_versions = ch_versions.mix(SAMTOOLS_COVERAGE.out.versions.first())
PANELCOVERAGE(
- MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).view().map { meta, bed, index, genelists ->
+ MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
// Because groovy typing sucks ass; apparently an array of 1 is automatically converted to a string...
if (genelists !instanceof List) {
genelists = [genelists]
diff --git a/subworkflows/nf-core/bcl_demultiplex/main.nf b/subworkflows/nf-core/bcl_demultiplex/main.nf
index fefa3af3..bfe1ae83 100644
--- a/subworkflows/nf-core/bcl_demultiplex/main.nf
+++ b/subworkflows/nf-core/bcl_demultiplex/main.nf
@@ -9,64 +9,66 @@ include { BCL2FASTQ } from "../../../modules/nf-core/bcl2fastq/main"
workflow BCL_DEMULTIPLEX {
take:
- ch_flowcell // [[id:"", lane:""], samplesheet.csv, path/to/bcl/files]
- demultiplexer // bclconvert or bcl2fastq
+ ch_flowcell // [[id:"", lane:""], samplesheet.csv, path/to/bcl/files]
+ demultiplexer // bclconvert or bcl2fastq
main:
- ch_versions = channel.empty()
- ch_fastq = channel.empty()
- ch_reports = channel.empty()
- ch_stats = channel.empty()
- ch_interop = channel.empty()
- ch_logs = channel.empty()
+ ch_versions = channel.empty()
+ ch_fastq = channel.empty()
+ ch_reports = channel.empty()
+ ch_stats = channel.empty()
+ ch_interop = channel.empty()
+ ch_logs = channel.empty()
- // Split flowcells into separate channels containing run as tar and run as path
- // https://nextflow.slack.com/archives/C02T98A23U7/p1650963988498929
- ch_flowcell
- .branch { _meta, _samplesheet, run ->
- tar: run.toString().endsWith(".tar.gz")
- dir: true
- }
- .set { ch_flowcells }
+ // Split flowcells into separate channels containing run as tar and run as path
+ // https://nextflow.slack.com/archives/C02T98A23U7/p1650963988498929
+ ch_flowcell
+ .branch { _meta, _samplesheet, run ->
+ tar: run.toString().endsWith(".tar.gz")
+ dir: true
+ }.set { ch_flowcells }
- ch_flowcells.tar
- .multiMap { meta, samplesheet, run ->
- samplesheets: [meta, samplesheet]
- run_dirs: [meta, run]
- }
- .set { ch_flowcells_tar }
+ ch_flowcells.tar
+ .multiMap { meta, samplesheet, run ->
+ samplesheets: [ meta, samplesheet ]
+ run_dirs: [ meta, run ]
+ }.set { ch_flowcells_tar }
- // Runs when run_dir is a tar archive
- // Re-join the metadata and the untarred run directory with the samplesheet
- ch_flowcells_tar_merged = ch_flowcells_tar.samplesheets.join(ch_flowcells_tar.run_dirs)
+ // Runs when run_dir is a tar archive
+ // Re-join the metadata and the untarred run directory with the samplesheet
+ ch_flowcells_tar_merged = ch_flowcells_tar
+ .samplesheets
+ .join( ch_flowcells_tar.run_dirs )
- // Merge the two channels back together
- ch_flowcells = ch_flowcells.dir.mix(ch_flowcells_tar_merged)
+ // Merge the two channels back together
+ ch_flowcells = ch_flowcells.dir.mix(ch_flowcells_tar_merged)
- // MODULE: bclconvert
- // Demultiplex the bcl files
- if (demultiplexer == "bclconvert") {
- BCLCONVERT(ch_flowcells)
- ch_fastq = ch_fastq.mix(BCLCONVERT.out.fastq)
- ch_interop = ch_interop.mix(BCLCONVERT.out.interop)
- ch_reports = ch_reports.mix(BCLCONVERT.out.reports)
- ch_logs = ch_logs.mix(BCLCONVERT.out.logs)
- ch_versions = ch_versions.mix(BCLCONVERT.out.versions.first())
- }
+ // MODULE: bclconvert
+ // Demultiplex the bcl files
+ if (demultiplexer == "bclconvert") {
+ BCLCONVERT( ch_flowcells )
+ ch_fastq = ch_fastq.mix(BCLCONVERT.out.fastq)
+ ch_interop = ch_interop.mix(BCLCONVERT.out.interop)
+ ch_reports = ch_reports.mix(BCLCONVERT.out.reports)
+ ch_logs = ch_logs.mix(BCLCONVERT.out.logs)
+ ch_versions = ch_versions.mix(BCLCONVERT.out.versions.first())
+ }
- // MODULE: bcl2fastq
- // Demultiplex the bcl files
- if (demultiplexer == "bcl2fastq") {
- BCL2FASTQ(ch_flowcells)
- ch_fastq = ch_fastq.mix(BCL2FASTQ.out.fastq)
- ch_interop = ch_interop.mix(BCL2FASTQ.out.interop)
- ch_reports = ch_reports.mix(BCL2FASTQ.out.reports)
- ch_stats = ch_stats.mix(BCL2FASTQ.out.stats)
- ch_versions = ch_versions.mix(BCL2FASTQ.out.versions.first())
- }
+ // MODULE: bcl2fastq
+ // Demultiplex the bcl files
+ if (demultiplexer == "bcl2fastq") {
+ BCL2FASTQ( ch_flowcells )
+ ch_fastq = ch_fastq.mix(BCL2FASTQ.out.fastq)
+ ch_interop = ch_interop.mix(BCL2FASTQ.out.interop)
+ ch_reports = ch_reports.mix(BCL2FASTQ.out.reports)
+ ch_stats = ch_stats.mix(BCL2FASTQ.out.stats)
+ ch_versions = ch_versions.mix(BCL2FASTQ.out.versions.first())
+ }
- // Generate meta for each fastq
- ch_fastq
+ // Generate meta for each fastq
+ ch_fastq
+ // reshapes the channel from a single emit of [meta, [fastq, fastq, fastq...]]
+ // to emits per fastq file like [meta, fastq]
.transpose()
.map { fc_meta, fastq ->
def meta = [:]
@@ -84,7 +86,7 @@ workflow BCL_DEMULTIPLEX {
line = buffered.readLine()
buffered.close()
}
- if (line != null && line.startsWith('@')) {
+ if ( line != null && line.startsWith('@') ) {
line = line.substring(1)
// expected format is like:
// xx:yy:FLOWCELLID:LANE:... (seven fields)
@@ -93,40 +95,45 @@ workflow BCL_DEMULTIPLEX {
// "@::::::: :::"
//def sequencer_serial = fields[0]
//def run_nubmer = fields[1]
- def fcid = fields[2]
- def lane = fields[3]
- def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
+ def fcid = fields[2]
+ def lane = fields[3]
+ def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
def ID = [fcid, lane].join(".")
def PU = [fcid, lane, index].findAll().join(".")
def PL = "ILLUMINA"
def SM = fastq.getSimpleName().toString() - ~/_S[0-9]+.*$/
- meta.readgroup = ["ID": ID, "SM": SM, "PL": PL, "PU": PU]
+ meta.readgroup = [
+ "ID": ID,
+ "SM": SM,
+ "PL": PL,
+ "PU": PU
+ ]
meta.empty = false
- }
- else {
- println("No reads were found in FASTQ file: ${fastq}")
+ } else {
+ println "No reads were found in FASTQ file: ${fastq}"
meta.readgroup = [:]
meta.empty = true
}
return [meta, fastq]
}
+ // Group by the meta id so that we can find mate pairs if they exist
.groupTuple(by: [0])
.map { meta, fastq ->
meta.single_end = fastq.size() == 1
return [meta, fastq.flatten()]
}
.branch { meta, _fastq ->
- fastq: meta.empty == false
- empty_fastq: meta.empty == true
+ fastq : meta.empty == false
+ empty_fastq : meta.empty == true
}
- .set { ch_fastq_with_meta }
+ .set{ch_fastq_with_meta}
emit:
- fastq = ch_fastq_with_meta.fastq
- empty_fastq = ch_fastq_with_meta.empty_fastq
- reports = ch_reports
- stats = ch_stats
- interop = ch_interop
- logs = ch_logs
- versions = ch_versions
+ fastq = ch_fastq_with_meta.fastq
+ empty_fastq = ch_fastq_with_meta.empty_fastq
+ reports = ch_reports
+ stats = ch_stats
+ interop = ch_interop
+ logs = ch_logs
+ versions = ch_versions
}
diff --git a/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config b/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
index 555a2ec7..dd8bfa2a 100644
--- a/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
+++ b/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
@@ -1,12 +1,13 @@
process {
withName: BCLCONVERT {
- ext.args = {
- [meta.lane ? "--bcl-only-lane ${meta.lane}" : "", "--force"].join(" ").trim()
- }
+ ext.args = {[
+ meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
+ "--force"
+ ].join(" ").trim()}
}
withName: BCL2FASTQ {
- ext.args = {
- ["--tiles s_1_1101"].join(" ").trim()
- }
+ ext.args = {[
+ "--tiles s_1_1101"
+ ].join(" ").trim()}
}
}
diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
index 7049caef..d6e593e8 100644
--- a/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nextflow_pipeline/main.nf
@@ -10,9 +10,9 @@
workflow UTILS_NEXTFLOW_PIPELINE {
take:
- print_version // boolean: print version
- dump_parameters // boolean: dump parameters
- outdir // path: base directory used to publish pipeline results
+ print_version // boolean: print version
+ dump_parameters // boolean: dump parameters
+ outdir // path: base directory used to publish pipeline results
check_conda_channels // boolean: check conda channels
main:
@@ -72,10 +72,10 @@ def getWorkflowVersion() {
//
def dumpParametersToJSON(outdir) {
def timestamp = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')
- def filename = "params_${timestamp}.json"
- def temp_pf = new File(workflow.launchDir.toString(), ".${filename}")
- def jsonStr = groovy.json.JsonOutput.toJson(params)
- temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr)
+ def filename = "params_${timestamp}.json"
+ def temp_pf = new File(workflow.launchDir.toString(), ".${filename}")
+ def jsonStr = groovy.json.JsonOutput.toJson(params)
+ temp_pf.text = groovy.json.JsonOutput.prettyPrint(jsonStr)
nextflow.extension.FilesEx.copyTo(temp_pf.toPath(), "${outdir}/pipeline_info/params_${timestamp}.json")
temp_pf.delete()
@@ -91,12 +91,12 @@ def checkCondaChannels() {
def config = parser.load("conda config --show channels".execute().text)
channels = config.channels
}
- catch (e: NullPointerException) {
+ catch (NullPointerException e) {
log.debug(e)
log.warn("Could not verify conda channel configuration.")
return null
}
- catch (e: IOException) {
+ catch (IOException e) {
log.debug(e)
log.warn("Could not verify conda channel configuration.")
return null
@@ -111,8 +111,7 @@ def checkCondaChannels() {
def channel_priority_violation = required_channels_in_order != channels.findAll { ch -> ch in required_channels_in_order }
if (channels_missing | channel_priority_violation) {
- log.warn(
- """\
+ log.warn """\
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There is a problem with your Conda configuration!
You will need to set-up the conda-forge and bioconda channels correctly.
@@ -123,6 +122,5 @@ def checkCondaChannels() {
${required_channels_in_order}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
""".stripIndent(true)
- )
}
}
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
index cf586322..2f30e9a4 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
@@ -125,12 +125,12 @@ def paramsSummaryMultiqc(summary_params) {
}
def yaml_file_text = "id: '${workflow.manifest.name.replace('/', '-')}-summary'\n" as String
- yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n"
- yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n"
- yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n"
- yaml_file_text += "plot_type: 'html'\n"
- yaml_file_text += "data: |\n"
- yaml_file_text += "${summary_section}"
+ yaml_file_text += "description: ' - this information is collected when the pipeline is started.'\n"
+ yaml_file_text += "section_name: '${workflow.manifest.name} Workflow Summary'\n"
+ yaml_file_text += "section_href: 'https://github.com/${workflow.manifest.name}'\n"
+ yaml_file_text += "plot_type: 'html'\n"
+ yaml_file_text += "data: |\n"
+ yaml_file_text += "${summary_section}"
return yaml_file_text
}
@@ -138,67 +138,67 @@ def paramsSummaryMultiqc(summary_params) {
//
// ANSII colours used for terminal logging
//
-def logColours(monochrome_logs = true) {
+def logColours(monochrome_logs=true) {
def colorcodes = [:] as Map
// Reset / Meta
- colorcodes['reset'] = monochrome_logs ? '' : "\033[0m"
- colorcodes['bold'] = monochrome_logs ? '' : "\033[1m"
- colorcodes['dim'] = monochrome_logs ? '' : "\033[2m"
+ colorcodes['reset'] = monochrome_logs ? '' : "\033[0m"
+ colorcodes['bold'] = monochrome_logs ? '' : "\033[1m"
+ colorcodes['dim'] = monochrome_logs ? '' : "\033[2m"
colorcodes['underlined'] = monochrome_logs ? '' : "\033[4m"
- colorcodes['blink'] = monochrome_logs ? '' : "\033[5m"
- colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m"
- colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m"
+ colorcodes['blink'] = monochrome_logs ? '' : "\033[5m"
+ colorcodes['reverse'] = monochrome_logs ? '' : "\033[7m"
+ colorcodes['hidden'] = monochrome_logs ? '' : "\033[8m"
// Regular Colors
- colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m"
- colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m"
- colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m"
+ colorcodes['black'] = monochrome_logs ? '' : "\033[0;30m"
+ colorcodes['red'] = monochrome_logs ? '' : "\033[0;31m"
+ colorcodes['green'] = monochrome_logs ? '' : "\033[0;32m"
colorcodes['yellow'] = monochrome_logs ? '' : "\033[0;33m"
- colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m"
+ colorcodes['blue'] = monochrome_logs ? '' : "\033[0;34m"
colorcodes['purple'] = monochrome_logs ? '' : "\033[0;35m"
- colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m"
- colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m"
+ colorcodes['cyan'] = monochrome_logs ? '' : "\033[0;36m"
+ colorcodes['white'] = monochrome_logs ? '' : "\033[0;37m"
// Bold
- colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m"
- colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m"
- colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m"
+ colorcodes['bblack'] = monochrome_logs ? '' : "\033[1;30m"
+ colorcodes['bred'] = monochrome_logs ? '' : "\033[1;31m"
+ colorcodes['bgreen'] = monochrome_logs ? '' : "\033[1;32m"
colorcodes['byellow'] = monochrome_logs ? '' : "\033[1;33m"
- colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m"
+ colorcodes['bblue'] = monochrome_logs ? '' : "\033[1;34m"
colorcodes['bpurple'] = monochrome_logs ? '' : "\033[1;35m"
- colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m"
- colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m"
+ colorcodes['bcyan'] = monochrome_logs ? '' : "\033[1;36m"
+ colorcodes['bwhite'] = monochrome_logs ? '' : "\033[1;37m"
// Underline
- colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m"
- colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m"
- colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m"
+ colorcodes['ublack'] = monochrome_logs ? '' : "\033[4;30m"
+ colorcodes['ured'] = monochrome_logs ? '' : "\033[4;31m"
+ colorcodes['ugreen'] = monochrome_logs ? '' : "\033[4;32m"
colorcodes['uyellow'] = monochrome_logs ? '' : "\033[4;33m"
- colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m"
+ colorcodes['ublue'] = monochrome_logs ? '' : "\033[4;34m"
colorcodes['upurple'] = monochrome_logs ? '' : "\033[4;35m"
- colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m"
- colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m"
+ colorcodes['ucyan'] = monochrome_logs ? '' : "\033[4;36m"
+ colorcodes['uwhite'] = monochrome_logs ? '' : "\033[4;37m"
// High Intensity
- colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m"
- colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m"
- colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m"
+ colorcodes['iblack'] = monochrome_logs ? '' : "\033[0;90m"
+ colorcodes['ired'] = monochrome_logs ? '' : "\033[0;91m"
+ colorcodes['igreen'] = monochrome_logs ? '' : "\033[0;92m"
colorcodes['iyellow'] = monochrome_logs ? '' : "\033[0;93m"
- colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m"
+ colorcodes['iblue'] = monochrome_logs ? '' : "\033[0;94m"
colorcodes['ipurple'] = monochrome_logs ? '' : "\033[0;95m"
- colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m"
- colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m"
+ colorcodes['icyan'] = monochrome_logs ? '' : "\033[0;96m"
+ colorcodes['iwhite'] = monochrome_logs ? '' : "\033[0;97m"
// Bold High Intensity
- colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m"
- colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m"
- colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m"
+ colorcodes['biblack'] = monochrome_logs ? '' : "\033[1;90m"
+ colorcodes['bired'] = monochrome_logs ? '' : "\033[1;91m"
+ colorcodes['bigreen'] = monochrome_logs ? '' : "\033[1;92m"
colorcodes['biyellow'] = monochrome_logs ? '' : "\033[1;93m"
- colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m"
+ colorcodes['biblue'] = monochrome_logs ? '' : "\033[1;94m"
colorcodes['bipurple'] = monochrome_logs ? '' : "\033[1;95m"
- colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m"
- colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m"
+ colorcodes['bicyan'] = monochrome_logs ? '' : "\033[1;96m"
+ colorcodes['biwhite'] = monochrome_logs ? '' : "\033[1;97m"
return colorcodes
}
@@ -208,21 +208,17 @@ def logColours(monochrome_logs = true) {
def getSingleReport(multiqc_reports) {
if (multiqc_reports instanceof Path) {
return multiqc_reports
- }
- else if (multiqc_reports instanceof List) {
+ } else if (multiqc_reports instanceof List) {
if (multiqc_reports.size() == 0) {
log.warn("[${workflow.manifest.name}] No reports found from process 'MULTIQC'")
return null
- }
- else if (multiqc_reports.size() == 1) {
+ } else if (multiqc_reports.size() == 1) {
return multiqc_reports.first()
- }
- else {
+ } else {
log.warn("[${workflow.manifest.name}] Found multiple reports from process 'MULTIQC', will use only one")
return multiqc_reports.first()
}
- }
- else {
+ } else {
return null
}
}
@@ -230,7 +226,7 @@ def getSingleReport(multiqc_reports) {
//
// Construct and send completion email
//
-def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs = true, multiqc_report = null) {
+def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdir, monochrome_logs=true, multiqc_report=null) {
// Set up the e-mail variables
def subject = "[${workflow.manifest.name}] Successful: ${workflow.runName}"
@@ -247,35 +243,35 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
}
def misc_fields = [:]
- misc_fields['Date Started'] = workflow.start
- misc_fields['Date Completed'] = workflow.complete
+ misc_fields['Date Started'] = workflow.start
+ misc_fields['Date Completed'] = workflow.complete
misc_fields['Pipeline script file path'] = workflow.scriptFile
- misc_fields['Pipeline script hash ID'] = workflow.scriptId
+ misc_fields['Pipeline script hash ID'] = workflow.scriptId
if (workflow.repository) {
- misc_fields['Pipeline repository Git URL'] = workflow.repository
+ misc_fields['Pipeline repository Git URL'] = workflow.repository
}
if (workflow.commitId) {
misc_fields['Pipeline repository Git Commit'] = workflow.commitId
}
if (workflow.revision) {
- misc_fields['Pipeline Git branch/tag'] = workflow.revision
+ misc_fields['Pipeline Git branch/tag'] = workflow.revision
}
- misc_fields['Nextflow Version'] = workflow.nextflow.version
- misc_fields['Nextflow Build'] = workflow.nextflow.build
+ misc_fields['Nextflow Version'] = workflow.nextflow.version
+ misc_fields['Nextflow Build'] = workflow.nextflow.build
misc_fields['Nextflow Compile Timestamp'] = workflow.nextflow.timestamp
def email_fields = [:]
- email_fields['version'] = getWorkflowVersion()
- email_fields['runName'] = workflow.runName
- email_fields['success'] = workflow.success
+ email_fields['version'] = getWorkflowVersion()
+ email_fields['runName'] = workflow.runName
+ email_fields['success'] = workflow.success
email_fields['dateComplete'] = workflow.complete
- email_fields['duration'] = workflow.duration
- email_fields['exitStatus'] = workflow.exitStatus
+ email_fields['duration'] = workflow.duration
+ email_fields['exitStatus'] = workflow.exitStatus
email_fields['errorMessage'] = (workflow.errorMessage ?: 'None')
- email_fields['errorReport'] = (workflow.errorReport ?: 'None')
- email_fields['commandLine'] = workflow.commandLine
- email_fields['projectDir'] = workflow.projectDir
- email_fields['summary'] = summary << misc_fields
+ email_fields['errorReport'] = (workflow.errorReport ?: 'None')
+ email_fields['commandLine'] = workflow.commandLine
+ email_fields['projectDir'] = workflow.projectDir
+ email_fields['summary'] = summary << misc_fields
// On success try attach the multiqc report
def mqc_report = getSingleReport(multiqc_report)
@@ -287,22 +283,22 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
}
// Render the TXT template
- def engine = new groovy.text.GStringTemplateEngine()
- def tf = new File("${workflow.projectDir}/assets/email_template.txt")
+ def engine = new groovy.text.GStringTemplateEngine()
+ def tf = new File("${workflow.projectDir}/assets/email_template.txt")
def txt_template = engine.createTemplate(tf).make(email_fields)
- def email_txt = txt_template.toString()
+ def email_txt = txt_template.toString()
// Render the HTML template
- def hf = new File("${workflow.projectDir}/assets/email_template.html")
+ def hf = new File("${workflow.projectDir}/assets/email_template.html")
def html_template = engine.createTemplate(hf).make(email_fields)
- def email_html = html_template.toString()
+ def email_html = html_template.toString()
// Render the sendmail template
def max_multiqc_email_size = (params.containsKey('max_multiqc_email_size') ? params.max_multiqc_email_size : 0) as MemoryUnit
- def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()]
- def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt")
- def sendmail_template = engine.createTemplate(sf).make(smail_fields)
- def sendmail_html = sendmail_template.toString()
+ def smail_fields = [email: email_address, subject: subject, email_txt: email_txt, email_html: email_html, projectDir: "${workflow.projectDir}", mqcFile: mqc_report, mqcMaxSize: max_multiqc_email_size.toBytes()]
+ def sf = new File("${workflow.projectDir}/assets/sendmail_template.txt")
+ def sendmail_template = engine.createTemplate(sf).make(smail_fields)
+ def sendmail_html = sendmail_template.toString()
// Send the HTML e-mail
def colors = logColours(monochrome_logs) as Map
@@ -317,7 +313,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
['sendmail', '-t'].execute() << sendmail_html
log.info("-${colors.purple}[${workflow.manifest.name}]${colors.green} Sent summary e-mail to ${email_address} (sendmail)-")
}
- catch (msg: Exception) {
+ catch (Exception msg) {
log.debug(msg.toString())
log.debug("Trying with mail instead of sendmail")
// Catch failures and try with plaintext
@@ -343,7 +339,7 @@ def completionEmail(summary_params, email, email_on_fail, plaintext_email, outdi
//
// Print pipeline summary on completion
//
-def completionSummary(monochrome_logs = true) {
+def completionSummary(monochrome_logs=true) {
def colors = logColours(monochrome_logs) as Map
if (workflow.success) {
if (workflow.stats.ignoredCount == 0) {
@@ -371,44 +367,44 @@ def imNotification(summary_params, hook_url) {
}
def misc_fields = [:]
- misc_fields['start'] = workflow.start
- misc_fields['complete'] = workflow.complete
- misc_fields['scriptfile'] = workflow.scriptFile
- misc_fields['scriptid'] = workflow.scriptId
+ 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
+ misc_fields['commitid'] = workflow.commitId
}
if (workflow.revision) {
- misc_fields['revision'] = 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
+ 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['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['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
+ 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()
+ 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_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()
+ def json_message = json_template.toString()
// POST
def post = new URL(hook_url).openConnection()
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config
index a09572e5..d0a926bf 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/tests/nextflow.config
@@ -3,7 +3,7 @@ manifest {
author = """nf-core"""
homePage = 'https://127.0.0.1'
description = """Dummy pipeline"""
- nextflowVersion = '!>=23.04.0'
+ nextflowVersion = '!>=23.04.0'
version = '9.9.9'
doi = 'https://doi.org/10.5281/zenodo.5070524'
}
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
index e2821afd..1df8b76f 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf
+++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf
@@ -7,20 +7,25 @@ include { validateParameters } from 'plugin/nf-schema'
include { paramsHelp } from 'plugin/nf-schema'
workflow UTILS_NFSCHEMA_PLUGIN {
+
take:
- input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow
- validate_params // boolean: validate the parameters
- parameters_schema // string: path to the parameters JSON schema.
- help // boolean: show help message
- help_full // boolean: show full help message
- show_hidden // boolean: show hidden parameters in help message
- before_text // string: text to show before the help message and parameters summary
- after_text // string: text to show after the help message and parameters summary
- command // string: an example command of the pipeline
+ input_workflow // workflow: the workflow object used by nf-schema to get metadata from the workflow
+ validate_params // boolean: validate the parameters
+ parameters_schema // string: path to the parameters JSON schema.
+ // this has to be the same as the schema given to `validation.parametersSchema`
+ // when this input is empty it will automatically use the configured schema or
+ // "${projectDir}/nextflow_schema.json" as default. This input should not be empty
+ // for meta pipelines
+ help // boolean: show help message
+ help_full // boolean: show full help message
+ show_hidden // boolean: show hidden parameters in help message
+ before_text // string: text to show before the help message and parameters summary
+ after_text // string: text to show after the help message and parameters summary
+ command // string: an example command of the pipeline
main:
- if (help || help_full) {
+ if(help || help_full) {
help_options = [
beforeText: before_text,
afterText: after_text,
@@ -28,16 +33,14 @@ workflow UTILS_NFSCHEMA_PLUGIN {
showHidden: show_hidden,
fullHelp: help_full,
]
- if (parameters_schema) {
+ if(parameters_schema) {
help_options << [parametersSchema: parameters_schema]
}
- log.info(
- paramsHelp(
- help_options,
- params.help instanceof String && params.help != "true" ? params.help : "",
- )
+ log.info paramsHelp(
+ help_options,
+ (params.help instanceof String && params.help != "true") ? params.help : "",
)
- exit(0)
+ exit 0
}
//
@@ -46,20 +49,20 @@ workflow UTILS_NFSCHEMA_PLUGIN {
//
summary_options = [:]
- if (parameters_schema) {
+ if(parameters_schema) {
summary_options << [parametersSchema: parameters_schema]
}
- log.info(before_text)
- log.info(paramsSummaryLog(summary_options, input_workflow))
- log.info(after_text)
+ log.info before_text
+ log.info paramsSummaryLog(summary_options, input_workflow)
+ log.info after_text
//
// Validate the parameters using nextflow_schema.json or the schema
// given via the validation.parametersSchema configuration option
//
- if (validate_params) {
+ if(validate_params) {
validateOptions = [:]
- if (parameters_schema) {
+ if(parameters_schema) {
validateOptions << [parametersSchema: parameters_schema]
}
validateParameters(validateOptions)
diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
index c8ce8606..f6537cc3 100644
--- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
+++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config
@@ -4,5 +4,5 @@ plugins {
validation {
parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json"
- monochromeLogs = true
+ monochromeLogs = true
}
From 58afbd1d2e0ddacc6529487468019cc3bf69726a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 19:12:58 +0100
Subject: [PATCH 193/228] patch modules
---
.../picard-collecthsmetrics.diff | 4 +--
.../picard-collectmultiplemetrics.diff | 27 ++++++++++++++++---
.../picard-collectwgsmetrics.diff | 2 +-
3 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
index 1407a35a..f4bf1eda 100644
--- a/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
+++ b/modules/nf-core/picard/collecthsmetrics/picard-collecthsmetrics.diff
@@ -56,9 +56,9 @@ Changes in 'picard/collecthsmetrics/main.nf':
-
+ --OUTPUT ${prefix}.CollectHsMetrics.coverage_metrics \\
+ --TMP_DIR .
+ """
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
+ stub:
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test.snap' is unchanged
'modules/nf-core/picard/collecthsmetrics/tests/main.nf.test' is unchanged
diff --git a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
index 0a40ffb6..1d7cbf60 100644
--- a/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
+++ b/modules/nf-core/picard/collectmultiplemetrics/picard-collectmultiplemetrics.diff
@@ -15,7 +15,17 @@ Changes in 'picard/collectmultiplemetrics/main.nf':
output:
tuple val(meta), path("*_metrics"), emit: metrics
-@@ -31,12 +29,14 @@
+@@ -23,7 +21,8 @@
+ script:
+ def args = task.ext.args ?: ''
+ def prefix = task.ext.prefix ?: "${meta.id}"
+- def reference = fasta ? "--REFERENCE_SEQUENCE ${fasta}" : ""
++ def intervals_cmd = intervals ? "--INTERVALS ${intervals.join(',')}" : ""
++ 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()
}
"""
@@ -26,10 +36,21 @@ Changes in 'picard/collectmultiplemetrics/main.nf':
$args \\
--INPUT $bam \\
--OUTPUT ${prefix}.CollectMultipleMetrics \\
+- $reference
+-
+ --TMP_DIR . \\
- $reference
++ $reference_cmd \\
++ $intervals_cmd
+ """
- cat <<-END_VERSIONS > versions.yml
+ 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/collectwgsmetrics/picard-collectwgsmetrics.diff b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
index 04fea62a..c7503d9b 100644
--- a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
+++ b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
@@ -30,7 +30,7 @@ Changes in 'picard/collectwgsmetrics/main.nf':
+ --TMP_DIR . \\
$interval
-
+ """
'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test.snap' is unchanged
'modules/nf-core/picard/collectwgsmetrics/tests/main.nf.test' is unchanged
From c627fe42115ae55596ac2499be0f76815713b0fa Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 19:18:17 +0100
Subject: [PATCH 194/228] remove versions
---
subworkflows/local/coverage/main.nf | 1 -
1 file changed, 1 deletion(-)
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 82d6cb30..7df1cf7d 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -25,7 +25,6 @@ workflow COVERAGE {
return [meta, cram, crai, fasta, fai]
}
)
- ch_versions = ch_versions.mix(SAMTOOLS_COVERAGE.out.versions.first())
PANELCOVERAGE(
MOSDEPTH.out.per_base_bed.join(MOSDEPTH.out.per_base_csi).combine(ch_genelists).map { meta, bed, index, genelists ->
From b875892ca4b325e9a824aa22058f83f2621e54d4 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 19:46:11 +0100
Subject: [PATCH 195/228] panelcoverage: topic + make parallel
---
modules/local/panelcoverage/main.nf | 25 +++-----------
.../local/panelcoverage/main.nf.test.snap | 34 +++++++++++++++----
2 files changed, 32 insertions(+), 27 deletions(-)
diff --git a/modules/local/panelcoverage/main.nf b/modules/local/panelcoverage/main.nf
index a731f817..6e29a9c6 100644
--- a/modules/local/panelcoverage/main.nf
+++ b/modules/local/panelcoverage/main.nf
@@ -1,6 +1,6 @@
process PANELCOVERAGE {
tag "${meta.id}"
- label 'process_single'
+ label 'process_medium'
conda "${moduleDir}/environment.yml"
container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container
@@ -12,24 +12,13 @@ process PANELCOVERAGE {
output:
tuple val(meta), path("*.mosdepth.region.dist.txt"), emit: regiondist
- path "versions.yml", emit: versions
-
- when:
- task.ext.when == null || task.ext.when
+ tuple val("${task.process}"), val('cmgg_genelists'), eval('cmgg_genelists -v 2>&1 | sed \"s/^.*cmgg_genelists version //\"'), emit: versions_cmgg_genelists, topic: versions
+ tuple val("${task.process}"), val('bedtools'), eval('bedtools --version 2>&1 | sed \"s/^.*bedtools v//\"'), emit: versions_bedtools, topic: versions
script:
def prefix = task.ext.prefix ?: "${meta.id}"
"""
- for GENELIST in ${genelists}
- do
- cmgg_genelists regiondist --samplename ${prefix} --perbase ${perbase} --genelist \$GENELIST
- done
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- cmgg_genelists: \$(cmgg_genelists -v 2>&1 | sed 's/^.*cmgg_genelists version //')
- bedtools: \$(echo \$(bedtools --version 2>&1) | sed 's/^.*bedtools v//' ))
- END_VERSIONS
+ echo ${genelists} | tr ' ' '\n' | xargs -n 1 -P ${task.cpus} -I {} cmgg_genelists regiondist --samplename ${prefix} --perbase ${perbase} --genelist {}
"""
stub:
@@ -40,11 +29,5 @@ process PANELCOVERAGE {
name=\$(basename \$GENELIST .bed)
touch ${prefix}_\${name}.mosdepth.region.dist.txt
done
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- cmgg_genelists: \$(cmgg_genelists --version 2>&1 | sed 's/^.*cmgg_genelists version //')
- bedtools: \$(echo \$(bedtools --version 2>&1) | sed 's/^.*bedtools v//' ))
- END_VERSIONS
"""
}
diff --git a/tests/modules/local/panelcoverage/main.nf.test.snap b/tests/modules/local/panelcoverage/main.nf.test.snap
index cdb60adb..4a912279 100644
--- a/tests/modules/local/panelcoverage/main.nf.test.snap
+++ b/tests/modules/local/panelcoverage/main.nf.test.snap
@@ -12,7 +12,18 @@
]
],
"1": [
- "versions.yml:md5,2452395e283f5046f40bee1d26a09121"
+ [
+ "PANELCOVERAGE",
+ "cmgg_genelists",
+ "0.1.0"
+ ]
+ ],
+ "2": [
+ [
+ "PANELCOVERAGE",
+ "bedtools",
+ "2.31.1"
+ ]
],
"regiondist": [
[
@@ -23,15 +34,26 @@
"test_genelist_chr21_per_exon.mosdepth.region.dist.txt:md5,b29a7f12cef3be13215923edf6dde674"
]
],
- "versions": [
- "versions.yml:md5,2452395e283f5046f40bee1d26a09121"
+ "versions_bedtools": [
+ [
+ "PANELCOVERAGE",
+ "bedtools",
+ "2.31.1"
+ ]
+ ],
+ "versions_cmgg_genelists": [
+ [
+ "PANELCOVERAGE",
+ "cmgg_genelists",
+ "0.1.0"
+ ]
]
}
],
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2024-04-12T14:47:04.895941"
+ "timestamp": "2026-02-11T19:45:02.994288"
}
}
\ No newline at end of file
From c6d16cde19d5cacadbc642f03e87c629eeef38a2 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 19:47:15 +0100
Subject: [PATCH 196/228] coverage: drop versions
---
subworkflows/local/coverage/main.nf | 4 ----
1 file changed, 4 deletions(-)
diff --git a/subworkflows/local/coverage/main.nf b/subworkflows/local/coverage/main.nf
index 7df1cf7d..a3458574 100644
--- a/subworkflows/local/coverage/main.nf
+++ b/subworkflows/local/coverage/main.nf
@@ -11,9 +11,6 @@ workflow COVERAGE {
ch_genelists // channel: [optional] [genelists]
main:
-
- ch_versions = channel.empty()
-
MOSDEPTH(
ch_meta_cram_crai_fasta_fai_roi.map { meta, cram, crai, fasta, _fai, roi ->
return [meta, cram, crai, roi, fasta]
@@ -46,7 +43,6 @@ workflow COVERAGE {
}
}
)
- ch_versions = ch_versions.mix(PANELCOVERAGE.out.versions.first())
emit:
mosdepth_global = MOSDEPTH.out.global_txt
From 48c69b7c868a8f94b67863a94c19dbc731c04cad Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 19:53:01 +0100
Subject: [PATCH 197/228] fix bcl* outputs
---
modules/nf-core/bcl2fastq/bcl2fastq.diff | 101 +++++++++++++++++
modules/nf-core/bcl2fastq/main.nf | 40 +++----
.../nf-core/bcl2fastq/tests/nextflow.config | 2 +-
modules/nf-core/bclconvert/bclconvert.diff | 107 ++++++++++++++++++
modules/nf-core/bclconvert/main.nf | 41 ++++---
.../nf-core/bclconvert/tests/nextflow.config | 2 +-
6 files changed, 250 insertions(+), 43 deletions(-)
create mode 100644 modules/nf-core/bcl2fastq/bcl2fastq.diff
create mode 100644 modules/nf-core/bclconvert/bclconvert.diff
diff --git a/modules/nf-core/bcl2fastq/bcl2fastq.diff b/modules/nf-core/bcl2fastq/bcl2fastq.diff
new file mode 100644
index 00000000..0e24436c
--- /dev/null
+++ b/modules/nf-core/bcl2fastq/bcl2fastq.diff
@@ -0,0 +1,101 @@
+Changes in component 'nf-core/bcl2fastq'
+'modules/nf-core/bcl2fastq/LICENSE' is unchanged
+'modules/nf-core/bcl2fastq/Dockerfile' is unchanged
+'modules/nf-core/bcl2fastq/README.md' is unchanged
+'modules/nf-core/bcl2fastq/.gitignore' is unchanged
+'modules/nf-core/bcl2fastq/meta.yml' is unchanged
+Changes in 'bcl2fastq/main.nf':
+--- modules/nf-core/bcl2fastq/main.nf
++++ modules/nf-core/bcl2fastq/main.nf
+@@ -1,5 +1,5 @@
+ process BCL2FASTQ {
+- tag { "$meta.lane" ? "$meta.id"+"."+"$meta.lane" : "$meta.id" }
++ tag { "${meta.lane}" ? "${meta.id}" + "." + "${meta.lane}" : "${meta.id}" }
+ label 'process_high'
+
+ container "nf-core/bcl2fastq:2.20.0.422"
+@@ -8,14 +8,14 @@
+ tuple val(meta), path(samplesheet), path(run_dir)
+
+ output:
+- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz") , emit: fastq
+- tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz") , optional:true, emit: fastq_idx
+- tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz") , optional:true, emit: undetermined
+- tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz") , optional:true, emit: undetermined_idx
+- tuple val(meta), path("output/Reports") , emit: reports
+- tuple val(meta), path("output/Stats") , emit: stats
+- tuple val(meta), path("InterOp/*.bin") , emit: interop
+- path("versions.yml") , emit: versions
++ tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
++ tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz"), optional: true, emit: fastq_idx
++ tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz"), optional: true, emit: undetermined
++ tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz"), optional: true, emit: undetermined_idx
++ tuple val(meta), path("output/Reports/*"), emit: reports
++ tuple val(meta), path("output/Stats/*"), emit: stats
++ tuple val(meta), path("InterOp/*.bin"), emit: interop
++ path ("versions.yml"), emit: versions
+
+ when:
+ task.ext.when == null || task.ext.when
+@@ -23,7 +23,7 @@
+ script:
+ // Exit if running this module with -profile conda / -profile mamba
+ if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
+- error "BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead."
++ error("BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead.")
+ }
+ def args = task.ext.args ?: ''
+ def args2 = task.ext.args2 ?: ''
+@@ -37,27 +37,27 @@
+
+ if ${input_tar}; then
+ ## Ensures --strip-components only applied when top level of tar contents is a directory
+- ## If just files or multiple directories, place all in $input_dir
++ ## If just files or multiple directories, place all in ${input_dir}
+
+ if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
+ tar \\
+- -C $input_dir --strip-components 1 \\
++ -C ${input_dir} --strip-components 1 \\
+ -xavf \\
+- $args2 \\
+- $run_dir \\
+- $args3
++ ${args2} \\
++ ${run_dir} \\
++ ${args3}
+ else
+ tar \\
+- -C $input_dir \\
++ -C ${input_dir} \\
+ -xavf \\
+- $args2 \\
+- $run_dir \\
+- $args3
++ ${args2} \\
++ ${run_dir} \\
++ ${args3}
+ fi
+ fi
+
+ bcl2fastq \\
+- $args \\
++ ${args} \\
+ --output-dir output \\
+ --runfolder-dir ${input_dir} \\
+ --sample-sheet ${samplesheet} \\
+
+'modules/nf-core/bcl2fastq/tests/main.nf.test.snap' is unchanged
+Changes in 'bcl2fastq/tests/nextflow.config':
+--- modules/nf-core/bcl2fastq/tests/nextflow.config
++++ modules/nf-core/bcl2fastq/tests/nextflow.config
+@@ -2,5 +2,5 @@
+
+ publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
+
+- ext.args = "--tiles s_1_1101"
++ ext.args = "--tiles s_1_1101"
+ }
+
+'modules/nf-core/bcl2fastq/tests/main.nf.test' is unchanged
+************************************************************
diff --git a/modules/nf-core/bcl2fastq/main.nf b/modules/nf-core/bcl2fastq/main.nf
index 865f7951..b06bec18 100644
--- a/modules/nf-core/bcl2fastq/main.nf
+++ b/modules/nf-core/bcl2fastq/main.nf
@@ -1,5 +1,5 @@
process BCL2FASTQ {
- tag { "$meta.lane" ? "$meta.id"+"."+"$meta.lane" : "$meta.id" }
+ tag { "${meta.lane}" ? "${meta.id}" + "." + "${meta.lane}" : "${meta.id}" }
label 'process_high'
container "nf-core/bcl2fastq:2.20.0.422"
@@ -8,14 +8,14 @@ process BCL2FASTQ {
tuple val(meta), path(samplesheet), path(run_dir)
output:
- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz") , emit: fastq
- tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz") , optional:true, emit: fastq_idx
- tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz") , optional:true, emit: undetermined
- tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz") , optional:true, emit: undetermined_idx
- tuple val(meta), path("output/Reports") , emit: reports
- tuple val(meta), path("output/Stats") , emit: stats
- tuple val(meta), path("InterOp/*.bin") , emit: interop
- path("versions.yml") , emit: versions
+ tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
+ tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz"), optional: true, emit: fastq_idx
+ tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz"), optional: true, emit: undetermined
+ tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz"), optional: true, emit: undetermined_idx
+ tuple val(meta), path("output/Reports/*"), emit: reports
+ tuple val(meta), path("output/Stats/*"), emit: stats
+ tuple val(meta), path("InterOp/*.bin"), emit: interop
+ path ("versions.yml"), emit: versions
when:
task.ext.when == null || task.ext.when
@@ -23,7 +23,7 @@ process BCL2FASTQ {
script:
// Exit if running this module with -profile conda / -profile mamba
if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
- error "BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead."
+ error("BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead.")
}
def args = task.ext.args ?: ''
def args2 = task.ext.args2 ?: ''
@@ -37,27 +37,27 @@ process BCL2FASTQ {
if ${input_tar}; then
## Ensures --strip-components only applied when top level of tar contents is a directory
- ## If just files or multiple directories, place all in $input_dir
+ ## If just files or multiple directories, place all in ${input_dir}
if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
tar \\
- -C $input_dir --strip-components 1 \\
+ -C ${input_dir} --strip-components 1 \\
-xavf \\
- $args2 \\
- $run_dir \\
- $args3
+ ${args2} \\
+ ${run_dir} \\
+ ${args3}
else
tar \\
- -C $input_dir \\
+ -C ${input_dir} \\
-xavf \\
- $args2 \\
- $run_dir \\
- $args3
+ ${args2} \\
+ ${run_dir} \\
+ ${args3}
fi
fi
bcl2fastq \\
- $args \\
+ ${args} \\
--output-dir output \\
--runfolder-dir ${input_dir} \\
--sample-sheet ${samplesheet} \\
diff --git a/modules/nf-core/bcl2fastq/tests/nextflow.config b/modules/nf-core/bcl2fastq/tests/nextflow.config
index d1985111..38ad79af 100644
--- a/modules/nf-core/bcl2fastq/tests/nextflow.config
+++ b/modules/nf-core/bcl2fastq/tests/nextflow.config
@@ -2,5 +2,5 @@ process {
publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
- ext.args = "--tiles s_1_1101"
+ ext.args = "--tiles s_1_1101"
}
diff --git a/modules/nf-core/bclconvert/bclconvert.diff b/modules/nf-core/bclconvert/bclconvert.diff
new file mode 100644
index 00000000..caa6b812
--- /dev/null
+++ b/modules/nf-core/bclconvert/bclconvert.diff
@@ -0,0 +1,107 @@
+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
+@@ -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"
+@@ -8,14 +8,14 @@
+ tuple val(meta), path(samplesheet), path(run_dir)
+
+ output:
+- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz") , emit: fastq
+- 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") , emit: reports
+- tuple val(meta), path("output/Logs") , emit: logs
+- tuple val(meta), path("output/InterOp/*.bin") , emit: interop , optional:true
+- path("versions.yml") , emit: versions
++ tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
++ 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/*"), emit: reports
++ tuple val(meta), path("output/Logs/*"), emit: logs
++ tuple val(meta), path("output/InterOp/*.bin"), emit: interop, optional: true
++ path ("versions.yml"), emit: versions
+
+ when:
+ task.ext.when == null || task.ext.when
+@@ -23,7 +23,7 @@
+ script:
+ // Exit if running this module with -profile conda / -profile mamba
+ if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
+- error "BCLCONVERT module does not support Conda. Please use Docker / Singularity / Podman instead."
++ error("BCLCONVERT module does not support Conda. Please use Docker / Singularity / Podman instead.")
+ }
+ def args = task.ext.args ?: ''
+ def args2 = task.ext.args2 ?: ''
+@@ -37,27 +37,27 @@
+
+ if ${input_tar}; then
+ ## Ensures --strip-components only applied when top level of tar contents is a directory
+- ## If just files or multiple directories, place all in $input_dir
++ ## If just files or multiple directories, place all in ${input_dir}
+
+ if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
+ tar \\
+- -C $input_dir --strip-components 1 \\
++ -C ${input_dir} --strip-components 1 \\
+ -xavf \\
+- $args2 \\
+- $run_dir \\
+- $args3
++ ${args2} \\
++ ${run_dir} \\
++ ${args3}
+ else
+ tar \\
+- -C $input_dir \\
++ -C ${input_dir} \\
+ -xavf \\
+- $args2 \\
+- $run_dir \\
+- $args3
++ ${args2} \\
++ ${run_dir} \\
++ ${args3}
+ fi
+ fi
+
+ bcl-convert \\
+- $args \\
++ ${args} \\
+ --output-directory output \\
+ --bcl-input-directory ${input_dir} \\
+ --sample-sheet ${samplesheet}
+@@ -107,5 +107,4 @@
+ bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
+ END_VERSIONS
+ """
+-
+ }
+
+'modules/nf-core/bclconvert/tests/main.nf.test.snap' is unchanged
+Changes in 'bclconvert/tests/nextflow.config':
+--- modules/nf-core/bclconvert/tests/nextflow.config
++++ modules/nf-core/bclconvert/tests/nextflow.config
+@@ -1,5 +1,5 @@
+ process {
+- withName: "BCLCONVERT" {
++ withName: BCLCONVERT {
+ ext.args = params.module_args
+ }
+ }
+
+'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 f1caafc3..6b164908 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"
@@ -8,14 +8,14 @@ process BCLCONVERT {
tuple val(meta), path(samplesheet), path(run_dir)
output:
- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz") , emit: fastq
- 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") , emit: reports
- tuple val(meta), path("output/Logs") , emit: logs
- tuple val(meta), path("output/InterOp/*.bin") , emit: interop , optional:true
- path("versions.yml") , emit: versions
+ tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
+ 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/*"), emit: reports
+ tuple val(meta), path("output/Logs/*"), emit: logs
+ tuple val(meta), path("output/InterOp/*.bin"), emit: interop, optional: true
+ path ("versions.yml"), emit: versions
when:
task.ext.when == null || task.ext.when
@@ -23,7 +23,7 @@ process BCLCONVERT {
script:
// Exit if running this module with -profile conda / -profile mamba
if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
- error "BCLCONVERT module does not support Conda. Please use Docker / Singularity / Podman instead."
+ error("BCLCONVERT module does not support Conda. Please use Docker / Singularity / Podman instead.")
}
def args = task.ext.args ?: ''
def args2 = task.ext.args2 ?: ''
@@ -37,27 +37,27 @@ process BCLCONVERT {
if ${input_tar}; then
## Ensures --strip-components only applied when top level of tar contents is a directory
- ## If just files or multiple directories, place all in $input_dir
+ ## If just files or multiple directories, place all in ${input_dir}
if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
tar \\
- -C $input_dir --strip-components 1 \\
+ -C ${input_dir} --strip-components 1 \\
-xavf \\
- $args2 \\
- $run_dir \\
- $args3
+ ${args2} \\
+ ${run_dir} \\
+ ${args3}
else
tar \\
- -C $input_dir \\
+ -C ${input_dir} \\
-xavf \\
- $args2 \\
- $run_dir \\
- $args3
+ ${args2} \\
+ ${run_dir} \\
+ ${args3}
fi
fi
bcl-convert \\
- $args \\
+ ${args} \\
--output-directory output \\
--bcl-input-directory ${input_dir} \\
--sample-sheet ${samplesheet}
@@ -107,5 +107,4 @@ process BCLCONVERT {
bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
END_VERSIONS
"""
-
}
diff --git a/modules/nf-core/bclconvert/tests/nextflow.config b/modules/nf-core/bclconvert/tests/nextflow.config
index 848581b5..47e194a6 100644
--- a/modules/nf-core/bclconvert/tests/nextflow.config
+++ b/modules/nf-core/bclconvert/tests/nextflow.config
@@ -1,5 +1,5 @@
process {
- withName: "BCLCONVERT" {
+ withName: BCLCONVERT {
ext.args = params.module_args
}
}
From 530564b204df65ee0db1a226e8dd9b1a4a652e46 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 20:21:02 +0100
Subject: [PATCH 198/228] fix bamsormadup inputs
---
modules.json | 3 +-
.../local/fastq_to_aligned_cram/main.nf | 14 +++---
.../fastq_to_aligned_cram/main.nf.test.snap | 43 +++++--------------
3 files changed, 19 insertions(+), 41 deletions(-)
diff --git a/modules.json b/modules.json
index 3b6b2674..253f63c6 100644
--- a/modules.json
+++ b/modules.json
@@ -8,7 +8,8 @@
"bcl2fastq": {
"branch": "master",
"git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
- "installed_by": ["bcl_demultiplex"]
+ "installed_by": ["bcl_demultiplex"],
+ "patch": "modules/nf-core/bcl2fastq/bcl2fastq.diff"
},
"bclconvert": {
"branch": "master",
diff --git a/subworkflows/local/fastq_to_aligned_cram/main.nf b/subworkflows/local/fastq_to_aligned_cram/main.nf
index 9ce33bc8..dfccf2d5 100644
--- a/subworkflows/local/fastq_to_aligned_cram/main.nf
+++ b/subworkflows/local/fastq_to_aligned_cram/main.nf
@@ -83,16 +83,16 @@ workflow FASTQ_TO_CRAM {
}
.groupTuple()
.map { meta, files ->
- return [meta, files.flatten(), getGenomeAttribute(meta.genome_data, 'fasta')]
+ return [meta, files.flatten(), getGenomeAttribute(meta.genome_data, 'fasta'), getGenomeAttribute(meta.genome_data, 'fai')]
}
.dump(tag: "FASTQ_TO_CRAM: aligned bam per sample", pretty: true)
- .branch { meta, files, fasta ->
+ .branch { meta, files, fasta, fai ->
bamsormadup: meta.markdup == "bamsormadup"
- return [meta, files, fasta]
+ return [meta, files, fasta, fai]
samtools: meta.markdup == "samtools"
- return [meta, files, fasta]
+ return [meta, files, fasta, fai]
sort: meta.markdup == "false" || meta.markdup == false
- return [meta, files, fasta]
+ return [meta, files, fasta, fai]
unknown: true
error("markdup option ${meta.markdup} not supported")
}
@@ -100,12 +100,12 @@ workflow FASTQ_TO_CRAM {
ch_markdup_index = channel.empty()
- // BIOBAMBAM_BAMSORMADUP([meta, [bam, bam]], fasta)
+ // BIOBAMBAM_BAMSORMADUP([meta, [bam, bam]], fasta, fai)
BIOBAMBAM_BAMSORMADUP(ch_bam_fasta.bamsormadup)
ch_markdup_index = ch_markdup_index.mix(BIOBAMBAM_BAMSORMADUP.out.bam.join(BIOBAMBAM_BAMSORMADUP.out.bam_index, failOnMismatch: true, failOnDuplicate: true))
ch_sormadup_metrics = ch_sormadup_metrics.mix(BIOBAMBAM_BAMSORMADUP.out.metrics)
- // SAMTOOLS_SORMADUP([meta, [bam, bam]], fasta)
+ // SAMTOOLS_SORMADUP([meta, [bam, bam]], fasta, fai)
SAMTOOLS_SORMADUP(ch_bam_fasta.samtools)
ch_markdup_index = ch_markdup_index.mix(SAMTOOLS_SORMADUP.out.cram.join(SAMTOOLS_SORMADUP.out.crai, failOnMismatch: true, failOnDuplicate: true))
ch_sormadup_metrics = ch_sormadup_metrics.mix(SAMTOOLS_SORMADUP.out.metrics)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index 5db51b5f..eb4e865f 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -33,18 +33,14 @@
],
"sormadup_metrics": [
- ],
- "versions": [
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T09:29:24.149695"
+ "timestamp": "2026-02-11T20:19:51.825749"
},
"fastq to cram - bwa - bamsormadup": {
"content": [
@@ -96,20 +92,14 @@
},
"test.merged.metrics.txt:md5,4ee20f12cb4d6077479a08310c8f6c70"
]
- ],
- "versions": [
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
- "versions.yml:md5,9598e8236a8fbab0f6745715fa0de9d3",
- "versions.yml:md5,d8544811f6b511ef45e9c3547430a30d"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T09:24:26.615795"
+ "timestamp": "2026-02-11T20:10:31.616836"
},
"fastq to cram - bwa - samtools sormadup": {
"content": [
@@ -161,19 +151,14 @@
},
"test.merged.metrics:md5,795c73aa836eb480e418f52db98e37cc"
]
- ],
- "versions": [
- "versions.yml:md5,53fb2eac4cab0b817e852418eb0ba719",
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T09:27:45.908866"
+ "timestamp": "2026-02-11T20:15:15.495706"
},
"fastq to cram - star - bamsormadup": {
"content": [
@@ -261,18 +246,14 @@
},
"test.merged.metrics.txt:md5,641527401576375d7c0b0b54fbaf63ab"
]
- ],
- "versions": [
- "versions.yml:md5,9598e8236a8fbab0f6745715fa0de9d3",
- "versions.yml:md5,d8544811f6b511ef45e9c3547430a30d"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T09:26:55.879993"
+ "timestamp": "2026-02-11T20:13:35.19973"
},
"fastq to cram - bwa - samtools sort": {
"content": [
@@ -308,17 +289,13 @@
],
"sormadup_metrics": [
- ],
- "versions": [
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75",
- "versions.yml:md5,5f142fd2dfa129d6b28f1368516bca75"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T09:28:34.042629"
+ "timestamp": "2026-02-11T20:16:26.285299"
}
}
\ No newline at end of file
From 6474ddc56798cc04bcb7b1e082fe42c0646468e8 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 20:44:37 +0100
Subject: [PATCH 199/228] fix bam_qc
---
.../nf-core/picard/collectwgsmetrics/main.nf | 2 +-
.../picard-collectwgsmetrics.diff | 2 +-
subworkflows/local/bam_qc/main.nf | 2 +-
.../local/bam_qc/main.nf.test.snap | 111 +++++++++++++-----
4 files changed, 87 insertions(+), 30 deletions(-)
diff --git a/modules/nf-core/picard/collectwgsmetrics/main.nf b/modules/nf-core/picard/collectwgsmetrics/main.nf
index a631b03f..b8d1ee42 100644
--- a/modules/nf-core/picard/collectwgsmetrics/main.nf
+++ b/modules/nf-core/picard/collectwgsmetrics/main.nf
@@ -8,7 +8,7 @@ process PICARD_COLLECTWGSMETRICS {
'community.wave.seqera.io/library/picard:3.4.0--e9963040df0a9bf6' }"
input:
- tuple val(meta), path(bam), path(bai) ,path(fasta) ,path(fai)
+ tuple val(meta), path(bam), path(bai) ,path(fasta) ,path(fai), path(dict)
path intervallist
output:
diff --git a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
index c7503d9b..c1389e4e 100644
--- a/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
+++ b/modules/nf-core/picard/collectwgsmetrics/picard-collectwgsmetrics.diff
@@ -11,7 +11,7 @@ Changes in 'picard/collectwgsmetrics/main.nf':
- 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(fasta) ,path(fai)
++ tuple val(meta), path(bam), path(bai) ,path(fasta) ,path(fai), path(dict)
path intervallist
output:
diff --git a/subworkflows/local/bam_qc/main.nf b/subworkflows/local/bam_qc/main.nf
index d9cd0f7c..b6cd772c 100644
--- a/subworkflows/local/bam_qc/main.nf
+++ b/subworkflows/local/bam_qc/main.nf
@@ -41,7 +41,7 @@ workflow BAM_QC {
ch_picard
.branch { meta, bam, bai, roi, fasta, fai, dict ->
hsmetrics: roi != []
- return [meta, bam, bai, roi, fasta, fai, dict]
+ return [meta, bam, bai, roi, roi, fasta, fai, dict]
wgsmetrics: roi == []
return [meta, bam, bai, fasta, fai, dict]
}
diff --git a/tests/subworkflows/local/bam_qc/main.nf.test.snap b/tests/subworkflows/local/bam_qc/main.nf.test.snap
index 3392b3dd..5b809485 100644
--- a/tests/subworkflows/local/bam_qc/main.nf.test.snap
+++ b/tests/subworkflows/local/bam_qc/main.nf.test.snap
@@ -3,13 +3,46 @@
"content": [
{
"picard_hsmetrics": [
-
+ [
+ {
+ "disable_picard_metrics": false,
+ "id": "test",
+ "single_end": false
+ },
+ "test.CollectHsMetrics.coverage_metrics"
+ ]
],
"picard_multiplemetrics": [
-
+ [
+ {
+ "disable_picard_metrics": false,
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.CollectMultipleMetrics.alignment_summary_metrics",
+ "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics",
+ "test.CollectMultipleMetrics.insert_size_metrics",
+ "test.CollectMultipleMetrics.quality_by_cycle_metrics",
+ "test.CollectMultipleMetrics.quality_distribution_metrics"
+ ]
+ ]
],
"picard_multiplemetrics_pdf": [
-
+ [
+ {
+ "disable_picard_metrics": false,
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf",
+ "test.CollectMultipleMetrics.insert_size_histogram.pdf",
+ "test.CollectMultipleMetrics.quality_by_cycle.pdf",
+ "test.CollectMultipleMetrics.quality_distribution.pdf",
+ "test.CollectMultipleMetrics.read_length_histogram.pdf"
+ ]
+ ]
],
"picard_wgsmetrics": [
@@ -43,18 +76,14 @@
},
"test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
- ],
- "versions": [
- "versions.yml:md5,15389a9f97668f320b9628da1903a93b",
- "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T19:21:23.498543"
+ "timestamp": "2026-02-11T20:41:14.126057"
},
"Bam QC - Samtools": {
"content": [
@@ -75,7 +104,8 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": true
},
"test.flagstat:md5,167e69b479663a15194ddf56cbc9e60e"
]
@@ -84,7 +114,8 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": true
},
"test.idxstats:md5,081d0431383fb7ea6b51b7077c6ec93c"
]
@@ -93,22 +124,19 @@
[
{
"id": "test",
- "single_end": false
+ "single_end": false,
+ "disable_picard_metrics": true
},
"test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
- ],
- "versions": [
- "versions.yml:md5,15389a9f97668f320b9628da1903a93b",
- "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.2"
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-02T12:50:04.027873"
+ "timestamp": "2026-02-11T20:27:00.941719"
},
"Bam QC - WGSmetrics": {
"content": [
@@ -117,13 +145,46 @@
],
"picard_multiplemetrics": [
-
+ [
+ {
+ "disable_picard_metrics": false,
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.CollectMultipleMetrics.alignment_summary_metrics",
+ "test.CollectMultipleMetrics.base_distribution_by_cycle_metrics",
+ "test.CollectMultipleMetrics.insert_size_metrics",
+ "test.CollectMultipleMetrics.quality_by_cycle_metrics",
+ "test.CollectMultipleMetrics.quality_distribution_metrics"
+ ]
+ ]
],
"picard_multiplemetrics_pdf": [
-
+ [
+ {
+ "disable_picard_metrics": false,
+ "id": "test",
+ "single_end": false
+ },
+ [
+ "test.CollectMultipleMetrics.base_distribution_by_cycle.pdf",
+ "test.CollectMultipleMetrics.insert_size_histogram.pdf",
+ "test.CollectMultipleMetrics.quality_by_cycle.pdf",
+ "test.CollectMultipleMetrics.quality_distribution.pdf",
+ "test.CollectMultipleMetrics.read_length_histogram.pdf"
+ ]
+ ]
],
"picard_wgsmetrics": [
-
+ [
+ {
+ "disable_picard_metrics": false,
+ "id": "test",
+ "single_end": false
+ },
+ "test.CollectWgsMetrics.coverage_metrics"
+ ]
],
"samtools_flagstat": [
[
@@ -154,17 +215,13 @@
},
"test.stats:md5,3535d8d302e61ca0d77ac718db8309f1"
]
- ],
- "versions": [
- "versions.yml:md5,15389a9f97668f320b9628da1903a93b",
- "versions.yml:md5,3fa45af2ff85005c0421d10e0b686bb5"
]
}
],
"meta": {
"nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nextflow": "25.10.4"
},
- "timestamp": "2026-02-10T19:25:10.626677"
+ "timestamp": "2026-02-11T20:26:15.482881"
}
}
\ No newline at end of file
From 3555ab3cd87e989871eea4e8080496465b7e6bcb Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 22:20:42 +0100
Subject: [PATCH 200/228] fix more tests
---
nextflow.config | 62 ++++----
tests/workflows/preprocessing.nf.test | 10 +-
tests/workflows/preprocessing.nf.test.snap | 173 +++++++++++++++------
workflows/preprocessing.nf | 10 +-
4 files changed, 167 insertions(+), 88 deletions(-)
diff --git a/nextflow.config b/nextflow.config
index 010059f3..a5ceb27d 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -10,50 +10,50 @@
params {
// Input options
- input = null
+ input = null
// References
- genome = null
- igenomes_base = '/references/'
- igenomes_ignore = false
+ genome = null
+ igenomes_base = '/references/'
+ igenomes_ignore = false
// Analysis options
- split_fastq = 100000000
- genelists = null
+ split_fastq = 100000000
+ genelists = null
// MultiQC options
- multiqc_config = null
- multiqc_title = null
- multiqc_logo = null
- max_multiqc_email_size = '25.MB'
- multiqc_methods_description = null
+ multiqc_config = null
+ multiqc_title = null
+ multiqc_logo = null
+ max_multiqc_email_size = '25.MB'
+ multiqc_methods_description = null
// Boilerplate options
- outdir = null
- publish_dir_mode = 'copy'
- email = null
- email_on_fail = null
- plaintext_email = false
- monochrome_logs = false
- hook_url = System.getenv('HOOK_URL')
- help = false
- help_full = false
- show_hidden = false
- version = false
- pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
- trace_report_suffix = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')
+ outdir = null
+ publish_dir_mode = 'copy'
+ email = null
+ email_on_fail = null
+ plaintext_email = false
+ monochrome_logs = false
+ hook_url = System.getenv('HOOK_URL')
+ help = false
+ help_full = false
+ show_hidden = false
+ version = false
+ pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
+ trace_report_suffix = new java.util.Date().format('yyyy-MM-dd_HH-mm-ss')
// Config options
- config_profile_name = null
- config_profile_description = null
+ config_profile_name = null
+ config_profile_description = null
- custom_config_version = 'main'
- custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.custom_config_version}"
- config_profile_contact = null
- config_profile_url = null
+ custom_config_version = 'main'
+ custom_config_base = "https://raw.githubusercontent.com/nf-cmgg/configs/${params.custom_config_version}"
+ config_profile_contact = null
+ config_profile_url = null
// Schema validation default options
- validate_params = true
+ validate_params = true
}
// Load base.config by default for all pipelines
diff --git a/tests/workflows/preprocessing.nf.test b/tests/workflows/preprocessing.nf.test
index dfc856d0..4d5e52cc 100644
--- a/tests/workflows/preprocessing.nf.test
+++ b/tests/workflows/preprocessing.nf.test
@@ -24,7 +24,8 @@ nextflow_workflow {
sample_type: "DNA",
aligner: "bwamem",
markdup: "bamsormadup",
- run_coverage: true
+ run_coverage: true,
+ roi: file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true)
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -46,6 +47,7 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
+ // genelists
input[2] = null
"""
}
@@ -115,6 +117,7 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
+ // genelists
input[2] = null
"""
}
@@ -165,7 +168,9 @@ nextflow_workflow {
sample_type: "DNA",
aligner: "bwamem",
markdup: "bamsormadup",
- run_coverage: true
+ run_coverage: false,
+ disable_picard_metrics: true,
+ roi: file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed", checkIfExists: true)
],
//fastq_1
file("https://github.com/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/fastq/sample1_R1.fastq.gz", checkIfExists: true),
@@ -187,6 +192,7 @@ nextflow_workflow {
gtf: "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
]
]
+ // genelists
input[2] = null
"""
}
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index d40bc343..fc2144f1 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -21,8 +21,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -66,6 +68,7 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"readgroup": {
"CN": "CMGG",
@@ -76,6 +79,7 @@
"SM": "sample1"
},
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -94,6 +98,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"readgroup": {
"CN": "CMGG",
@@ -111,7 +118,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
"sample1.fastp.json:md5,5a65f5141251ac26b8f0a0d0a618b524"
@@ -133,8 +139,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -155,6 +163,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -164,7 +175,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -182,6 +192,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -191,7 +204,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -209,6 +221,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -218,7 +233,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -239,6 +253,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -248,7 +265,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -266,6 +282,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -275,7 +294,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -293,6 +311,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -302,7 +323,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -320,6 +340,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -329,7 +352,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -347,6 +369,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -356,7 +381,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -374,6 +398,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -383,7 +410,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -439,8 +465,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -466,8 +494,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -498,8 +528,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -539,8 +571,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -566,8 +600,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -588,6 +624,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -597,7 +636,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -620,8 +658,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -642,6 +682,9 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -651,7 +694,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -659,18 +701,7 @@
]
],
"versions": [
- "versions.yml:md5,02acae00818ba01a01e2bdb03b574343",
- "versions.yml:md5,23b060bcc18a02fc8f981102ef3a3006",
- "versions.yml:md5,31df076e5d21d61db772cb39643350e2",
- "versions.yml:md5,b702df83d9ece54caa0e765a6286cdd2",
- "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
- "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
- "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d",
- "versions.yml:md5,cdce7da7ce14e29fbd9fd72e88505ffa",
- "versions.yml:md5,d00b52835d019d68e58aafd218429a75",
- "versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868",
- "versions.yml:md5,f567cdcfb384cc7a2d9ff4dc850f3bad",
- "versions.yml:md5,fe9b8b3a8dc895efcf8f7c0b3248ff2d"
+ "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d"
]
}
],
@@ -678,7 +709,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.4"
},
- "timestamp": "2026-02-11T12:00:40.443933"
+ "timestamp": "2026-02-11T21:21:37.068608"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -692,6 +723,7 @@
"groupSize": 1,
"groupTarget": {
"aligner": "bwamem",
+ "disable_picard_metrics": true,
"genome": "GRCh38",
"genome_data": {
"bwamem": "s3://test-data/genomics/homo_sapiens/genome/bwa/",
@@ -702,8 +734,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": false,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -737,6 +771,7 @@
{
"aligner": "bwamem",
"count": 1,
+ "disable_picard_metrics": true,
"genome": "GRCh38",
"genome_data": {
"bwamem": "s3://test-data/genomics/homo_sapiens/genome/bwa/",
@@ -747,6 +782,7 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"readgroup": {
"CN": "CMGG",
@@ -757,6 +793,7 @@
"SM": "sample1"
},
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": false,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -775,6 +812,10 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": false,
+ "disable_picard_metrics": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"readgroup": {
"CN": "CMGG",
@@ -792,7 +833,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"count": 1
},
"sample1.fastp.json:md5,5a65f5141251ac26b8f0a0d0a618b524"
@@ -804,6 +844,7 @@
"groupSize": 1,
"groupTarget": {
"aligner": "bwamem",
+ "disable_picard_metrics": true,
"genome": "GRCh38",
"genome_data": {
"bwamem": "s3://test-data/genomics/homo_sapiens/genome/bwa/",
@@ -814,8 +855,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": false,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -915,6 +958,7 @@
"groupSize": 1,
"groupTarget": {
"aligner": "bwamem",
+ "disable_picard_metrics": true,
"genome": "GRCh38",
"genome_data": {
"bwamem": "s3://test-data/genomics/homo_sapiens/genome/bwa/",
@@ -925,8 +969,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": false,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -947,6 +993,10 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": false,
+ "disable_picard_metrics": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -956,7 +1006,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -969,6 +1018,7 @@
"groupSize": 1,
"groupTarget": {
"aligner": "bwamem",
+ "disable_picard_metrics": true,
"genome": "GRCh38",
"genome_data": {
"bwamem": "s3://test-data/genomics/homo_sapiens/genome/bwa/",
@@ -979,8 +1029,10 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
+ "run_coverage": false,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1001,6 +1053,10 @@
"tag": "WES",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": false,
+ "disable_picard_metrics": true,
+ "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1010,7 +1066,6 @@
"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"
},
- "roi": "/nf-cmgg/test-datasets/raw/preprocessing/data/genomics/homo_sapiens/illumina/regions/roi_chr21.bed",
"id": "sample1"
}
},
@@ -1018,14 +1073,7 @@
]
],
"versions": [
- "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
- "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
- "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d",
- "versions.yml:md5,cdce7da7ce14e29fbd9fd72e88505ffa",
- "versions.yml:md5,d00b52835d019d68e58aafd218429a75",
- "versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868",
- "versions.yml:md5,f567cdcfb384cc7a2d9ff4dc850f3bad",
- "versions.yml:md5,fe9b8b3a8dc895efcf8f7c0b3248ff2d"
+ "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d"
]
}
],
@@ -1033,7 +1081,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.4"
},
- "timestamp": "2026-02-11T12:11:20.398961"
+ "timestamp": "2026-02-11T21:25:53.804729"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1057,7 +1105,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1101,6 +1151,7 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
"readgroup": {
"CN": "CMGG",
@@ -1110,6 +1161,7 @@
"PU": "H5T2YDSX3.1",
"SM": "sample1"
},
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1128,6 +1180,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"readgroup": {
"CN": "CMGG",
@@ -1166,7 +1220,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1187,6 +1243,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1213,6 +1271,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1239,6 +1299,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1268,6 +1330,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1294,6 +1358,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1329,6 +1395,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1396,7 +1464,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1427,7 +1497,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1458,7 +1530,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1490,7 +1564,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1516,7 +1592,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1537,6 +1615,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1568,7 +1648,9 @@
},
"id": "sample1",
"library": "test",
+ "markdup": "bamsormadup",
"organism": "Homo sapiens",
+ "run_coverage": true,
"sample_type": "DNA",
"samplename": "sample1",
"single_end": false,
@@ -1589,6 +1671,8 @@
"tag": "WGS",
"sample_type": "DNA",
"aligner": "bwamem",
+ "markdup": "bamsormadup",
+ "run_coverage": true,
"single_end": false,
"genome": "GRCh38",
"genome_data": {
@@ -1605,18 +1689,7 @@
]
],
"versions": [
- "versions.yml:md5,1d2a9b13790c70a69a1f62facc9b3a6c",
- "versions.yml:md5,23b060bcc18a02fc8f981102ef3a3006",
- "versions.yml:md5,31df076e5d21d61db772cb39643350e2",
- "versions.yml:md5,b702df83d9ece54caa0e765a6286cdd2",
- "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
- "versions.yml:md5,c4fcc95fcd514eab38e980cacf0d4e8c",
- "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d",
- "versions.yml:md5,cdce7da7ce14e29fbd9fd72e88505ffa",
- "versions.yml:md5,d00b52835d019d68e58aafd218429a75",
- "versions.yml:md5,d11c133ecb39ba9f6d7e081a8a6ff868",
- "versions.yml:md5,f567cdcfb384cc7a2d9ff4dc850f3bad",
- "versions.yml:md5,fe9b8b3a8dc895efcf8f7c0b3248ff2d"
+ "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d"
]
}
],
@@ -1624,6 +1697,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.4"
},
- "timestamp": "2026-02-11T12:06:12.331519"
+ "timestamp": "2026-02-11T22:18:07.06828"
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 034397f4..3954c603 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -270,9 +270,9 @@ workflow PREPROCESSING {
meta.roi && meta.roi != [] ? file(meta.roi, checkIfExists: true) : [],
]
}
- .set { ch_cram_crai_fasta_fai_roi }
+ .set { ch_coverage }
- COVERAGE(ch_cram_crai_fasta_fai_roi, ch_genelists)
+ COVERAGE(ch_coverage, ch_genelists)
ch_multiqc_files = ch_multiqc_files.mix(
COVERAGE.out.mosdepth_summary,
COVERAGE.out.mosdepth_global,
@@ -291,15 +291,15 @@ workflow PREPROCESSING {
meta,
cram,
crai,
- (meta.roi && meta.roi) != [] ? file(meta.roi, checkIfExists: true) : [],
+ meta.roi && meta.roi != [] ? file(meta.roi, checkIfExists: true) : [],
getGenomeAttribute(meta.genome_data, "fasta"),
getGenomeAttribute(meta.genome_data, "fai"),
getGenomeAttribute(meta.genome_data, "dict"),
]
}
- .set { ch_cram_crai_roi_fasta_fai_dict }
+ .set { ch_bam_qc }
- BAM_QC(ch_cram_crai_roi_fasta_fai_dict)
+ BAM_QC(ch_bam_qc)
ch_multiqc_files = ch_multiqc_files.mix(
BAM_QC.out.samtools_stats,
BAM_QC.out.samtools_flagstat,
From af539d4a17e089faf663673ca7304362a5c23cb1 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 22:38:28 +0100
Subject: [PATCH 201/228] fix coverage snapshot
---
tests/config/igenomes_test.config | 2 +-
.../local/coverage/main.nf.test.snap | 24 ++-----------------
2 files changed, 3 insertions(+), 23 deletions(-)
diff --git a/tests/config/igenomes_test.config b/tests/config/igenomes_test.config
index cac18b9e..5ecb24af 100644
--- a/tests/config/igenomes_test.config
+++ b/tests/config/igenomes_test.config
@@ -7,7 +7,7 @@ params {
fasta = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna"
star = "s3://test-data/genomics/homo_sapiens/genome/star/"
gtf = "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.gtf"
- genelists = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists/*.bed"
+ genelists = "s3://test-data/genomics/homo_sapiens/genome/regions/genelists"
}
}
}
diff --git a/tests/subworkflows/local/coverage/main.nf.test.snap b/tests/subworkflows/local/coverage/main.nf.test.snap
index 7bd91330..9934ac1f 100644
--- a/tests/subworkflows/local/coverage/main.nf.test.snap
+++ b/tests/subworkflows/local/coverage/main.nf.test.snap
@@ -51,11 +51,6 @@
]
]
],
- "14": [
- "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
- "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
- "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
- ],
"2": [
[
{
@@ -250,11 +245,6 @@
},
"test.coverage.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
]
- ],
- "versions": [
- "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
- "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
- "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
]
}
],
@@ -262,7 +252,7 @@
"nf-test": "0.9.3",
"nextflow": "25.10.4"
},
- "timestamp": "2026-02-11T14:05:13.106828"
+ "timestamp": "2026-02-11T22:37:17.825377"
},
"Coverage - seqcap": {
"content": [
@@ -313,11 +303,6 @@
"test_seqcap_Connective_tissue_per_exon.mosdepth.region.dist.txt:md5,e098c901acb1da8c2cf64a248306e71c"
]
],
- "14": [
- "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
- "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
- "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
- ],
"2": [
[
{
@@ -509,11 +494,6 @@
},
"test.coverage.txt:md5,2d81e108bf4175f2b892ab6e749fdf92"
]
- ],
- "versions": [
- "versions.yml:md5,67ac37f5eff6c19b8c605a2258aa721c",
- "versions.yml:md5,731a006ffa265ac74ad677b4e5a68640",
- "versions.yml:md5,8d8a3cea555f0b04692395a47351d7ef"
]
}
],
@@ -521,6 +501,6 @@
"nf-test": "0.9.3",
"nextflow": "25.10.4"
},
- "timestamp": "2026-02-11T13:54:02.513877"
+ "timestamp": "2026-02-11T22:36:21.526017"
}
}
\ No newline at end of file
From 8a64abcbd087c56305975575d4a28891d84683a1 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 11 Feb 2026 22:52:12 +0100
Subject: [PATCH 202/228] fix rna snapshots
---
.../local/fastq_align_rna/main.nf.test.snap | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index cf11ffe9..88691d56 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -93,19 +93,14 @@
},
"test.SJ.out.tab:md5,15852c5678c04e86dcb66793b7e02bb9"
]
- ],
- "versions": [
- "versions.yml:md5,a08c174f2d393f0b39c2cfe003ffafb9",
- "versions.yml:md5,e0beb4fb46280de51c432ed766a0cdb2",
- "versions.yml:md5,e1135512a195d12c4b6aaadd8e84dcf6"
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.2"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-12-17T16:44:58.048883426"
+ "timestamp": "2026-02-11T22:49:27.454517"
},
"fastq align rna - unknown aligner": {
"content": [
From 3aa3756dc98f285c986a2435af87bd07b2940aae Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 18 Feb 2026 09:46:34 +0100
Subject: [PATCH 203/228] deprecate bcl_demultiplex, only support bclconvert
---
modules.json | 16 +-
modules/nf-core/bcl2fastq/.gitignore | 2 -
modules/nf-core/bcl2fastq/Dockerfile | 25 --
modules/nf-core/bcl2fastq/LICENSE | 30 --
modules/nf-core/bcl2fastq/README.md | 19 --
modules/nf-core/bcl2fastq/bcl2fastq.diff | 101 ------
modules/nf-core/bcl2fastq/main.nf | 73 -----
modules/nf-core/bcl2fastq/meta.yml | 110 -------
modules/nf-core/bcl2fastq/tests/main.nf.test | 32 --
.../nf-core/bcl2fastq/tests/main.nf.test.snap | 219 -------------
.../nf-core/bcl2fastq/tests/nextflow.config | 6 -
modules/nf-core/bclconvert/Dockerfile | 34 +-
modules/nf-core/bclconvert/bclconvert.diff | 107 -------
modules/nf-core/bclconvert/main.nf | 111 ++++---
modules/nf-core/bclconvert/meta.yml | 62 ++--
modules/nf-core/bclconvert/tests/main.nf.test | 23 +-
.../bclconvert/tests/main.nf.test.snap | 290 ++++++++---------
subworkflows/nf-core/bcl_demultiplex/main.nf | 139 --------
subworkflows/nf-core/bcl_demultiplex/meta.yml | 62 ----
.../bcl_demultiplex/tests/main.nf.test | 100 ------
.../bcl_demultiplex/tests/main.nf.test.snap | 296 ------------------
.../bcl_demultiplex/tests/nextflow.config | 13 -
workflows/preprocessing.nf | 25 +-
23 files changed, 292 insertions(+), 1603 deletions(-)
delete mode 100644 modules/nf-core/bcl2fastq/.gitignore
delete mode 100644 modules/nf-core/bcl2fastq/Dockerfile
delete mode 100644 modules/nf-core/bcl2fastq/LICENSE
delete mode 100644 modules/nf-core/bcl2fastq/README.md
delete mode 100644 modules/nf-core/bcl2fastq/bcl2fastq.diff
delete mode 100644 modules/nf-core/bcl2fastq/main.nf
delete mode 100644 modules/nf-core/bcl2fastq/meta.yml
delete mode 100644 modules/nf-core/bcl2fastq/tests/main.nf.test
delete mode 100644 modules/nf-core/bcl2fastq/tests/main.nf.test.snap
delete mode 100644 modules/nf-core/bcl2fastq/tests/nextflow.config
delete mode 100644 modules/nf-core/bclconvert/bclconvert.diff
delete mode 100644 subworkflows/nf-core/bcl_demultiplex/main.nf
delete mode 100644 subworkflows/nf-core/bcl_demultiplex/meta.yml
delete mode 100644 subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test
delete mode 100644 subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test.snap
delete mode 100644 subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
diff --git a/modules.json b/modules.json
index 253f63c6..448ec404 100644
--- a/modules.json
+++ b/modules.json
@@ -5,17 +5,10 @@
"https://github.com/nf-core/modules.git": {
"modules": {
"nf-core": {
- "bcl2fastq": {
- "branch": "master",
- "git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
- "installed_by": ["bcl_demultiplex"],
- "patch": "modules/nf-core/bcl2fastq/bcl2fastq.diff"
- },
"bclconvert": {
"branch": "master",
- "git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
- "installed_by": ["bcl_demultiplex"],
- "patch": "modules/nf-core/bclconvert/bclconvert.diff"
+ "git_sha": "547b6a0078c2f4499b64d59edb8ae038b31971b2",
+ "installed_by": ["modules"]
},
"biobambam/bamsormadup": {
"branch": "master",
@@ -159,11 +152,6 @@
},
"subworkflows": {
"nf-core": {
- "bcl_demultiplex": {
- "branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
- "installed_by": ["subworkflows"]
- },
"fastq_align_dna": {
"branch": "master",
"git_sha": "5dd46a36fca68d6ad1a6b22ec47adc8c6863717d",
diff --git a/modules/nf-core/bcl2fastq/.gitignore b/modules/nf-core/bcl2fastq/.gitignore
deleted file mode 100644
index 45b0ea3a..00000000
--- a/modules/nf-core/bcl2fastq/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bcl-convert
-*.rpm
diff --git a/modules/nf-core/bcl2fastq/Dockerfile b/modules/nf-core/bcl2fastq/Dockerfile
deleted file mode 100644
index 5600ab84..00000000
--- a/modules/nf-core/bcl2fastq/Dockerfile
+++ /dev/null
@@ -1,25 +0,0 @@
-# Dockerfile to create container with bcl2fastq
-# Push to nfcore/bcl2fastq:
-
-FROM debian:bullseye-slim
-LABEL authors="Matthias De Smet " \
- description="Docker image containing bcl2fastq"
-# Disclaimer: this container is not provided nor supported by Illumina
-# 'ps' command is needed by some nextflow executions to collect system stats
-# Install procps and clean apt cache
-RUN apt-get update \
- && apt-get install -y \
- procps \
- && apt-get clean -y && rm -rf /var/lib/apt/lists/*
-# Link hostname cmd to fix hardcoded path
-RUN ln -s /bin/hostname /usr/bin/hostname
-
-# Add executable to image
-COPY bcl2fastq /usr/local/bin/bcl2fastq
-
-# Add external libs to image
-COPY css /usr/local/share/css
-COPY xsl /usr/local/share/xsl
-
-# Set permission
-RUN chmod +x /usr/local/bin/bcl2fastq && chmod -R +rX /usr/local/share/css && chmod -R +rX /usr/local/share/xsl
diff --git a/modules/nf-core/bcl2fastq/LICENSE b/modules/nf-core/bcl2fastq/LICENSE
deleted file mode 100644
index 6f523227..00000000
--- a/modules/nf-core/bcl2fastq/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-ILLUMINA END-USER SOFTWARE LICENSE AGREEMENT
-
-IMPORTANT-READ CAREFULLY. THIS IS A LICENSE AGREEMENT THAT YOU ARE REQUIRED TO ACCEPT BEFORE, DOWNLOADING, INSTALLING AND USING ANY SOFTWARE MADE AVAILABLE FROM THE ILLUMINA SUPPORT CENTER (https://support.illumina.com).
-
-CAREFULLY READ ALL THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT BEFORE PROCEEDING WITH DOWNLOADING, INSTALLING, AND/OR USING THE SOFTWARE. YOU ARE NOT PERMITTED TO DOWNLOAD, INSTALL, AND/OR USE THE SOFTWARE UNTIL YOU HAVE AGREED TO BE BOUND BY ALL OF THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT. YOU REPRESENT AND WARRANT THAT YOU ARE DULY AUTHORIZED TO ACCEPT THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT ON BEHALF OF YOUR EMPLOYER.
-
-Software made available through the Illumina Support Center is licensed, not sold, to you. Your license to each software program made available through the Illumina Support Center is subject to your prior acceptance of either this Illumina End-User Software License Agreement (“Agreement”), or a custom end user license agreement (“Custom EULA”), if one is provided with the software. Any software that is subject to this Agreement is referred to herein as the “Software.” By accepting this Agreement, you agree the terms and conditions of this Agreement will apply to and govern any and all of your downloads, installations, and uses of each Illumina software program made available through the Illumina Support Center, except that your download, installation, and use of any software provided with a Custom EULA will be governed by the terms and conditions of the Custom EULA.
-
-This Agreement is made and entered into by and between Illumina, Inc., a Delaware corporation, having offices at 5200 Illumina Way, San Diego, CA 92122 (“Illumina”) and you as the end-user of the Software (hereinafter, “Licensee” or “you”). All software, firmware, and associated media, printed materials, and online and electronic documentation, including any updates or upgrades thereof, made available through the Illumina Support Center (collectively, “Software”) provided to Licensee are for use solely by Licensee and the provisions herein WILL apply with respect to such Software.
-
-License Grant. Subject to the terms and conditions of this Agreement, Illumina grants to Licensee, under the following terms and conditions, a personal, non-exclusive, revocable, non-transferable, non-sublicensable license, for its internal end-use purposes only, in the ordinary course of Licensee’s business to use the Software in executable object code form only, solely at the Licensee’s facility to, install and use the Software on a single computer accessible only by Licensee (and not on any public network or server), where the single computer is owned, leased, or otherwise substantially controlled by Licensee, for the purpose of processing and analyzing data generated from an Illumina genetic sequencing instrument owned and operated solely by Licensee (the “Product”). In the case of Software provided by Illumina in non-compiled form, Illumina grants Licensee a personal, non-exclusive, non-sublicenseable, restricted right to compile, install, and use one copy of the Software solely for processing and analyzing data generated from the Product.
-License Restrictions. Except as expressly permitted in Section 1, Licensee may not make, have made, import, use, copy, reproduce, distribute, display, publish, sell, re-sell, lease, or sub-license the Software, in whole or in part, except as expressly provided for in this Agreement. Licensee may not modify, improve, translate, reverse engineer, decompile, disassemble, or create derivative works of the Software or otherwise attempt to (a) defeat, avoid, by-pass, remove, deactivate, or otherwise circumvent any software protection mechanisms in the Software including, without limitation, any such mechanism used to restrict or control the functionality of the Software, or (b) derive the source code or the underlying ideas, algorithms, structure, or organization form of the Software. Licensee will not allow, at any time, including during and after the term of the license, the Software or any portions or copies thereof in any form to become available to any third parties. Licensee may use the Software solely with genomic data that is generated using the Product; Licensee may not use the Software with any data generated from other products or instruments. Licensee may not use the Software to perform any data analysis services for any third party.
-Ownership. The Software is protected by United States and international intellectual property laws. All right, title, and interest in and to the Software (including associated intellectual property rights) are and will remain vested in Illumina or Illumina’s affiliated companies or licensors. Licensee acknowledges that no rights, license or interest to any Illumina trademarks are granted hereunder. Licensee acknowledges that unauthorized reproduction or distribution of the Software, or any portion of it, may result in severe civil and criminal penalties. Illumina reserves all rights in and to the Software not expressly granted to Licensee under this Agreement.
-Upgrades/Updates. Illumina may, at its sole discretion, provide updates or upgrades to the Software. In that case, Licensee WILL have the same rights and obligations under such updates or upgrades as it has for the versions of the Software initially provided to Licensee hereunder. Licensee recognizes that Illumina is not obligated to provide any upgrades or updates to, or support for, the Software.
-Data Integrity/Loss. Licensee is responsible for the integrity and availability, including preventing the loss of data that Licensee generates, uses, analyzes, manages, or stores in connection with or through its use of the Software, including without limitation, investigating and implementing industry appropriate policies and procedures regarding the provision of access to Licensee’s data, monitoring access and use of Licensee’s data, conducting routine backups and archiving of Licensee’s data, and ensuring the adequacy of anti-virus software. Accordingly, Licensee agrees that Illumina is not responsible for any inability to access, loss or corruption of data as a result of Licensee’s use of the Software, and Illumina has no liability to Licensee in connection with such inability to access, loss or corruption of data.
-Term of License. This Agreement will be in effect from the time Licensee expressly accepts the terms and conditions of this license, or otherwise installs the Software, thereby accepting the terms and conditions contained herein, and will remain in effect until terminated. This license will otherwise terminate upon the conditions set forth in this Agreement, if revoked by Illumina, or if Licensee fails to comply with any term or condition of this Agreement including failure to pay any applicable license fee. Licensee agrees upon termination of this Agreement for any reason to immediately discontinue use of and un-install the Software and destroy all copies of the Software in its possession and/or under its control, and return or destroy, at Illumina’s option, any compact disks, floppy disks or other media provided by Illumina storing the Software thereon (together with any authorized copies thereof), as well as any documentation associated therewith
-Limited Warranty. Illumina warrants that, for a period of 6 months from the date of download or installation of the Software by Licensee, the Software will perform in all material respects in accordance with the accompanying documentation available on the Illumina Support Center. EXCEPT AND TO THE EXTENT EXPRESSLY PROVIDED IN THE FOREGOING, AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED “AS IS” AND ILLUMINA EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS REGARDING THE SOFTWARE AND RESULTS GENERATED BY THE SOFTWARE, INCLUDING WITHOUT LIMITATION, TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, ALL OTHER EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABLE QUALITY, NON-INFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE, AND THOSE ARISING BY STATUTE OR OTHERWISE IN LAW OR FROM A COURSE OF DEALING OR USAGE OF TRADE. ILLUMINA DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET LICENSEE"S REQUIREMENTS, OR THAT THE OPERATION OF THE SOFTWARE WILL BE ERROR FREE OR UNINTERRUPTED.
-Limitation of Liability.
-(a) ILLUMINA’S ENTIRE LIABILITY AND LICENSEE"S EXCLUSIVE REMEDY UNDER THE LIMITED WARRANTY PROVISION OF SECTION 7 ABOVE WILL BE, AT ILLUMINA’S OPTION, EITHER (i) RETURN OF THE PRICE PAID FOR THE SOFTWARE, OR (ii) REPAIR OR REPLACEMENT OF THE PORTIONS OF THE SOFTWARE THAT DO NOT COMPLY WITH ILLUMINA’S LIMITED WARRANTY. THIS LIMITED WARRANTY IS VOID AND ILLUMINA WILL HAVE NO LIABILITY AT ALL IF FAILURE OF THE SOFTWARE TO COMPLY WITH ILLUMINA LIMITED WARRANTY HAS RESULTED FROM: (w) FAILURE TO USE THE SOFTWARE IN ACCORDANCE WITH ILLUMINA’S THEN CURRENT USER MANUAL OR THIS AGREEMENT; (x) ACCIDENT, ABUSE, OR MISAPPLICATION; (y) PRODUCTS OR EQUIPMENT NOT SPECIFIED BY ILLUMINA AS BEING COMPATIBLE WITH THE SOFTWARE; OR (z) IF LICENSEE HAS NOT NOTIFIED ILLUMINA IN WRITING OF THE DEFECT WITHIN THE ABOVE WARRANTY PERIOD.
-
-(b) TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL ILLUMINA BE LIABLE UNDER ANY THEORY OF CONTRACT, TORT, STRICT LIABILITY OR OTHER LEGAL OR EQUITABLE THEORY FOR ANY PERSONAL INJURY OR ANY INDIRECT, CONSEQUENTIAL, OR INCIDENTAL DAMAGES, EVEN IF ILLUMINA HAS BEEN ADVISED OF THE POSSIBILITY THEREOF INCLUDING, WITHOUT LIMITATION, LOST PROFITS, LOST DATA, INTERRUPTION OF BUSINESS, LOST BUSINESS REVENUE, OTHER ECONOMIC LOSS, OR ANY LOSS OF RECORDED DATA ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE. EXCEPT AND TO THE EXTENT EXPRESSLY PROVIDED IN SECTION 7 AND 8(a) ABOVE OR AS OTHERWISE PERMITTED BY LAW, IN NO EVENT WILL ILLUMINA’S TOTAL LIABILITY TO LICENSEE FOR ALL DAMAGES (OTHER THAN AS MAY BE REQUIRED BY APPLICABLE LAW IN CASES INVOLVING PERSONAL INJURY) EXCEED THE AMOUNT OF $500 USD. THE FOREGOING LIMITATIONS WILL APPLY EVEN IF THE ABOVE STATED REMEDY FAILS OF ITS ESSENTIAL PURPOSE.
-
-Survival. The limitations of liability and ownership rights of Illumina contained herein and Licensee’s obligations following termination of this Agreement WILL survive the termination of this Agreement for any reason.
-Research Use Only. The Software is labeled with a For Research Use Only or similar labeling statement and the performance characteristics of the Software have not been established and the Software is not for use in diagnostic procedures. Licensee acknowledges and agrees that (i) the Software has not been approved, cleared, or licensed by the United States Food and Drug Administration or any other regulatory entity whether foreign or domestic for any specific intended use, whether research, commercial, diagnostic, or otherwise, and (ii) Licensee must ensure it has any regulatory approvals that are necessary for Licensee’s intended uses of the Software. Licensee will comply with all applicable laws and regulations when using and maintaining the Software.
-General. Licensee may not sublicense, assign, share, pledge, rent or transfer any of its rights under this Agreement in relation to the Software or any portion thereof including documentation. Illumina reserves the right to change this Agreement at any time. When Illumina makes any changes, Illumina will provide the updated Agreement, or a link to it, on Illumina’s website (www.illumina.com) and such updated Agreement WILL become effective immediately. Licensee’s continued access to or use of the Software represents Licensee’s agreement to any revised Agreement. If one or more provisions of this Agreement are found to be invalid or unenforceable, this Agreement WILL not be rendered inoperative but the remaining provisions WILL continue in full force and effect. This Agreement constitutes the entire agreement between the parties with respect to the subject matter of this Agreement and merges all prior communications except that a “hard-copy” form of licensing agreement relating to the Software previously agreed to in writing by Illumina and Licensee WILL supersede and govern in the event of any conflicting provisions.
-Governing Law. This Agreement WILL be governed by and construed in accordance with the laws of the state of California, USA, without regard to its conflicts of laws principles, and independent of where a suit or action hereunder may be filed.
-U.S. Government End Users. If Licensee is a branch agency or instrumentality of the United States Government, the following provision applies. The Software is a “commercial item” as that term is defined at 48 C.F.R. 2.101, consisting of “commercial computer software” and “commercial computer software documentation,” as such terms are used in 48 C.F.R. 12.212 or 48 C.F.R. 227.7202 (as applicable). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4, all United States Government end users acquire the Software with only those rights set forth herein.
-Contact. Any questions regarding legal rights, duties, obligations, or restrictions associated with the software hereunder should be directed to Illumina, Inc., 5200 Illumina Way, San Diego, CA 92122, Attention: Legal Department, Phone: (858) 202-4500, Fax: (858) 202-4599, web site: www.illumina.com .
-Third Party Components. The Software may include third party software (“Third Party Programs”). Some of the Third Party Programs are available under open source or free software licenses. The License Agreement accompanying the Licensed Software does not alter any rights or obligations Licensee may have under those open source or free software licenses. The licenses that govern the terms and conditions of use of the Third Party Programs included in the Licensed Software are provided in the READ ME provided with the Software. The READ ME also contains copyright statements for the various open source software components (or portions thereof) that are distributed with the Licensed Software.
-END OF END-USER SOFTWARE LICENSE AGREEMENT.
diff --git a/modules/nf-core/bcl2fastq/README.md b/modules/nf-core/bcl2fastq/README.md
deleted file mode 100644
index be98aada..00000000
--- a/modules/nf-core/bcl2fastq/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Updating the docker container and making a new module release
-
-bcl2fastq is a commercial tool from Illumina. The container provided for the bcl2fastq nf-core module is not provided nor supported by Illumina. Updating the bcl2fastq versions in the container and pushing the update to Dockerhub needs to be done manually.
-
-1. Navigate to the appropriate download page. - [bcl2fastq](https://support.illumina.com/sequencing/sequencing_software/bcl2fastq-conversion-software/downloads.html): download the rpm of the desired bcl2fastq version with `curl` or `wget`.
-2. Unpack the RPM package using `rpm2cpio bcl2fastq2-*.rpm | cpio -i --make-directories`.
- - Move the executable located in `/usr/bin/bcl2fastq` into the same folder as the Dockerfile.
- - Move the `css` and `xsl` directories from `/local/share/` into the same folder as the Dockerfile
-3. Create and test the container:
-
- ```bash
- docker build . -t nfcore/bcl2fastq:
- ```
-
-4. Access rights are needed to push the container to the Dockerhub nfcore organization, please ask a core team member to do so.
-
- ```bash
- docker push nfcore/bcl2fastq:
- ```
diff --git a/modules/nf-core/bcl2fastq/bcl2fastq.diff b/modules/nf-core/bcl2fastq/bcl2fastq.diff
deleted file mode 100644
index 0e24436c..00000000
--- a/modules/nf-core/bcl2fastq/bcl2fastq.diff
+++ /dev/null
@@ -1,101 +0,0 @@
-Changes in component 'nf-core/bcl2fastq'
-'modules/nf-core/bcl2fastq/LICENSE' is unchanged
-'modules/nf-core/bcl2fastq/Dockerfile' is unchanged
-'modules/nf-core/bcl2fastq/README.md' is unchanged
-'modules/nf-core/bcl2fastq/.gitignore' is unchanged
-'modules/nf-core/bcl2fastq/meta.yml' is unchanged
-Changes in 'bcl2fastq/main.nf':
---- modules/nf-core/bcl2fastq/main.nf
-+++ modules/nf-core/bcl2fastq/main.nf
-@@ -1,5 +1,5 @@
- process BCL2FASTQ {
-- tag { "$meta.lane" ? "$meta.id"+"."+"$meta.lane" : "$meta.id" }
-+ tag { "${meta.lane}" ? "${meta.id}" + "." + "${meta.lane}" : "${meta.id}" }
- label 'process_high'
-
- container "nf-core/bcl2fastq:2.20.0.422"
-@@ -8,14 +8,14 @@
- tuple val(meta), path(samplesheet), path(run_dir)
-
- output:
-- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz") , emit: fastq
-- tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz") , optional:true, emit: fastq_idx
-- tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz") , optional:true, emit: undetermined
-- tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz") , optional:true, emit: undetermined_idx
-- tuple val(meta), path("output/Reports") , emit: reports
-- tuple val(meta), path("output/Stats") , emit: stats
-- tuple val(meta), path("InterOp/*.bin") , emit: interop
-- path("versions.yml") , emit: versions
-+ tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
-+ tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz"), optional: true, emit: fastq_idx
-+ tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz"), optional: true, emit: undetermined
-+ tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz"), optional: true, emit: undetermined_idx
-+ tuple val(meta), path("output/Reports/*"), emit: reports
-+ tuple val(meta), path("output/Stats/*"), emit: stats
-+ tuple val(meta), path("InterOp/*.bin"), emit: interop
-+ path ("versions.yml"), emit: versions
-
- when:
- task.ext.when == null || task.ext.when
-@@ -23,7 +23,7 @@
- script:
- // Exit if running this module with -profile conda / -profile mamba
- if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
-- error "BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead."
-+ error("BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead.")
- }
- def args = task.ext.args ?: ''
- def args2 = task.ext.args2 ?: ''
-@@ -37,27 +37,27 @@
-
- if ${input_tar}; then
- ## Ensures --strip-components only applied when top level of tar contents is a directory
-- ## If just files or multiple directories, place all in $input_dir
-+ ## If just files or multiple directories, place all in ${input_dir}
-
- if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
- tar \\
-- -C $input_dir --strip-components 1 \\
-+ -C ${input_dir} --strip-components 1 \\
- -xavf \\
-- $args2 \\
-- $run_dir \\
-- $args3
-+ ${args2} \\
-+ ${run_dir} \\
-+ ${args3}
- else
- tar \\
-- -C $input_dir \\
-+ -C ${input_dir} \\
- -xavf \\
-- $args2 \\
-- $run_dir \\
-- $args3
-+ ${args2} \\
-+ ${run_dir} \\
-+ ${args3}
- fi
- fi
-
- bcl2fastq \\
-- $args \\
-+ ${args} \\
- --output-dir output \\
- --runfolder-dir ${input_dir} \\
- --sample-sheet ${samplesheet} \\
-
-'modules/nf-core/bcl2fastq/tests/main.nf.test.snap' is unchanged
-Changes in 'bcl2fastq/tests/nextflow.config':
---- modules/nf-core/bcl2fastq/tests/nextflow.config
-+++ modules/nf-core/bcl2fastq/tests/nextflow.config
-@@ -2,5 +2,5 @@
-
- publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
-
-- ext.args = "--tiles s_1_1101"
-+ ext.args = "--tiles s_1_1101"
- }
-
-'modules/nf-core/bcl2fastq/tests/main.nf.test' is unchanged
-************************************************************
diff --git a/modules/nf-core/bcl2fastq/main.nf b/modules/nf-core/bcl2fastq/main.nf
deleted file mode 100644
index b06bec18..00000000
--- a/modules/nf-core/bcl2fastq/main.nf
+++ /dev/null
@@ -1,73 +0,0 @@
-process BCL2FASTQ {
- tag { "${meta.lane}" ? "${meta.id}" + "." + "${meta.lane}" : "${meta.id}" }
- label 'process_high'
-
- container "nf-core/bcl2fastq:2.20.0.422"
-
- input:
- tuple val(meta), path(samplesheet), path(run_dir)
-
- output:
- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
- tuple val(meta), path("output/**_S[1-9]*_I?_00?.fastq.gz"), optional: true, emit: fastq_idx
- tuple val(meta), path("output/**Undetermined_S0*_R?_00?.fastq.gz"), optional: true, emit: undetermined
- tuple val(meta), path("output/**Undetermined_S0*_I?_00?.fastq.gz"), optional: true, emit: undetermined_idx
- tuple val(meta), path("output/Reports/*"), emit: reports
- tuple val(meta), path("output/Stats/*"), emit: stats
- tuple val(meta), path("InterOp/*.bin"), emit: interop
- path ("versions.yml"), emit: versions
-
- when:
- task.ext.when == null || task.ext.when
-
- script:
- // Exit if running this module with -profile conda / -profile mamba
- if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
- error("BCL2FASTQ module does not support Conda. Please use Docker / Singularity / Podman instead.")
- }
- def args = task.ext.args ?: ''
- def args2 = task.ext.args2 ?: ''
- def args3 = task.ext.args3 ?: ''
- def input_tar = run_dir.toString().endsWith(".tar.gz") ? true : false
- def input_dir = input_tar ? run_dir.toString() - '.tar.gz' : run_dir
- """
- if [ ! -d ${input_dir} ]; then
- mkdir -p ${input_dir}
- fi
-
- if ${input_tar}; then
- ## Ensures --strip-components only applied when top level of tar contents is a directory
- ## If just files or multiple directories, place all in ${input_dir}
-
- if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
- tar \\
- -C ${input_dir} --strip-components 1 \\
- -xavf \\
- ${args2} \\
- ${run_dir} \\
- ${args3}
- else
- tar \\
- -C ${input_dir} \\
- -xavf \\
- ${args2} \\
- ${run_dir} \\
- ${args3}
- fi
- fi
-
- bcl2fastq \\
- ${args} \\
- --output-dir output \\
- --runfolder-dir ${input_dir} \\
- --sample-sheet ${samplesheet} \\
- --processing-threads ${task.cpus}
-
- cp -r ${input_dir}/InterOp .
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bcl2fastq: \$(bcl2fastq -V 2>&1 | grep -m 1 bcl2fastq | sed 's/^.*bcl2fastq v//')
- END_VERSIONS
- """
-}
diff --git a/modules/nf-core/bcl2fastq/meta.yml b/modules/nf-core/bcl2fastq/meta.yml
deleted file mode 100644
index af17d591..00000000
--- a/modules/nf-core/bcl2fastq/meta.yml
+++ /dev/null
@@ -1,110 +0,0 @@
-name: "bcl2fastq"
-description: Demultiplex Illumina BCL files
-keywords:
- - demultiplex
- - illumina
- - fastq
-tools:
- - "bcl2fastq":
- description: "Demultiplex Illumina BCL files"
- homepage: "https://support.illumina.com/sequencing/sequencing_software/bcl2fastq-conversion-software"
- documentation: "https://support.illumina.com/content/dam/illumina-support/documents/documentation/software_documentation/bcl2fastq/bcl2fastq2-v2-20-software-guide-15051736-03.pdf"
- licence: ["ILLUMINA"]
- identifier: ""
-input:
- - - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test', single_end:false ]
- - samplesheet:
- type: file
- description: "Input samplesheet"
- pattern: "*.{csv}"
- ontologies:
- - edam: http://edamontology.org/format_3752 # CSV
- - run_dir:
- type: file
- description: |
- Input run directory containing RunInfo.xml and BCL data
- Could be a directory or a tar of the directory
- ontologies: []
-output:
- fastq:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - output/**_S[1-9]*_R?_00?.fastq.gz:
- type: file
- description: Demultiplexed sample FASTQ files
- pattern: "**_S*_L00?_R?_00?.fastq.gz"
- ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
- fastq_idx:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - output/**_S[1-9]*_I?_00?.fastq.gz:
- type: file
- description: Optional demultiplexed index FASTQ files
- pattern: "**_S*_L00?_I?_00?.fastq.gz"
- ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
- undetermined:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - output/**Undetermined_S0*_R?_00?.fastq.gz:
- type: file
- description: Optional undetermined sample FASTQ files
- pattern: "Undetermined_S0_L00?_R?_00?.fastq.gz"
- ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
- undetermined_idx:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - output/**Undetermined_S0*_I?_00?.fastq.gz:
- type: file
- description: Optional undetermined index FASTQ files
- pattern: "Undetermined_S0_L00?_I?_00?.fastq.gz"
- ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
- reports:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - output/Reports:
- type: file
- description: Demultiplexing Reports
- pattern: "Reports/*"
- ontologies: []
- stats:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - output/Stats:
- type: file
- description: Statistics files
- pattern: "Stats/*"
- ontologies: []
- interop:
- - - meta:
- type: map
- description: Groovy Map containing sample information
- - InterOp/*.bin:
- type: file
- description: Interop files
- pattern: "*.{bin}"
- ontologies: []
- versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
-authors:
- - "@matthdsm"
-maintainers:
- - "@matthdsm"
diff --git a/modules/nf-core/bcl2fastq/tests/main.nf.test b/modules/nf-core/bcl2fastq/tests/main.nf.test
deleted file mode 100644
index d0e0b9a5..00000000
--- a/modules/nf-core/bcl2fastq/tests/main.nf.test
+++ /dev/null
@@ -1,32 +0,0 @@
-nextflow_process {
-
- name "Test Process BCL2FASTQ"
- script "modules/nf-core/bcl2fastq/main.nf"
- process "BCL2FASTQ"
- config "./nextflow.config"
- tag "bcl2fastq"
- tag "modules"
- tag "modules_nfcore"
-
- test("homo sapiens illumina [bcl]") {
- when {
- process {
- //TODO use new test dataset when available, see https://github.com/nf-core/test-datasets/issues/996
- """
- input[0] = [
- [ id: 'test', lane:1 ],
- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bcl/flowcell_samplesheet.csv', checkIfExists: true),
- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bcl/flowcell.tar.gz', checkIfExists: true)
- ]
- """
- }
- }
-
- then {
- assertAll(
- { assert process.success },
- { assert snapshot(process.out).match() }
- )
- }
- }
-}
diff --git a/modules/nf-core/bcl2fastq/tests/main.nf.test.snap b/modules/nf-core/bcl2fastq/tests/main.nf.test.snap
deleted file mode 100644
index 8addecc2..00000000
--- a/modules/nf-core/bcl2fastq/tests/main.nf.test.snap
+++ /dev/null
@@ -1,219 +0,0 @@
-{
- "homo sapiens illumina [bcl]": {
- "content": [
- {
- "0": [
- [
- {
- "id": "test",
- "lane": 1
- },
- "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b"
- ]
- ],
- "1": [
-
- ],
- "2": [
-
- ],
- "3": [
-
- ],
- "4": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- [
- [
- [
- [
- [
- "lane.html:md5,794e48287f47a9f22dcb6b6d0c22c3eb",
- "laneBarcode.html:md5,2bbdae3ee57151eab520c966597d7438"
- ],
- [
-
- ]
- ]
- ],
- [
- [
- [
- "lane.html:md5,f741870307050dcea79a838f5971770f",
- "laneBarcode.html:md5,ffe2e863811c76cb9da27d5d124e0611"
- ],
- [
- "lane.html:md5,cca97e771d3491dbc8cd3fe389595b09",
- "laneBarcode.html:md5,cca97e771d3491dbc8cd3fe389595b09"
- ]
- ],
- [
- [
- "lane.html:md5,c383b0768d9978733d3f5d3b91c15af0",
- "laneBarcode.html:md5,48842c23b9a2816aec540177df870968"
- ],
- [
-
- ]
- ]
- ]
- ],
- "Report.css:md5,eb7d3eb68fc1539f411404987246b59b",
- "index.html:md5,5747c407854ae2c358d0ec201ce622d8",
- "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34"
- ]
- ]
- ]
- ],
- "5": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946",
- "ConversionStats.xml:md5,8fe0f57f3f5d256a0762dba75ac62d05",
- "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad",
- "DemuxSummaryF1L1.txt:md5,03e5fd0c1e3079c5f8c7b4d0501b37ff",
- "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1",
- "Stats.json:md5,8e5f038b8aa9e465599d3575f930e604"
- ]
- ]
- ],
- "6": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953",
- "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434",
- "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286",
- "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99",
- "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf",
- "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c",
- "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c"
- ]
- ]
- ],
- "7": [
- "versions.yml:md5,12f3dca40b6a65cec6ba51c0fd872152"
- ],
- "fastq": [
- [
- {
- "id": "test",
- "lane": 1
- },
- "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b"
- ]
- ],
- "fastq_idx": [
-
- ],
- "interop": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953",
- "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434",
- "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286",
- "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99",
- "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf",
- "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c",
- "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c"
- ]
- ]
- ],
- "reports": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- [
- [
- [
- [
- [
- "lane.html:md5,794e48287f47a9f22dcb6b6d0c22c3eb",
- "laneBarcode.html:md5,2bbdae3ee57151eab520c966597d7438"
- ],
- [
-
- ]
- ]
- ],
- [
- [
- [
- "lane.html:md5,f741870307050dcea79a838f5971770f",
- "laneBarcode.html:md5,ffe2e863811c76cb9da27d5d124e0611"
- ],
- [
- "lane.html:md5,cca97e771d3491dbc8cd3fe389595b09",
- "laneBarcode.html:md5,cca97e771d3491dbc8cd3fe389595b09"
- ]
- ],
- [
- [
- "lane.html:md5,c383b0768d9978733d3f5d3b91c15af0",
- "laneBarcode.html:md5,48842c23b9a2816aec540177df870968"
- ],
- [
-
- ]
- ]
- ]
- ],
- "Report.css:md5,eb7d3eb68fc1539f411404987246b59b",
- "index.html:md5,5747c407854ae2c358d0ec201ce622d8",
- "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34"
- ]
- ]
- ]
- ],
- "stats": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946",
- "ConversionStats.xml:md5,8fe0f57f3f5d256a0762dba75ac62d05",
- "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad",
- "DemuxSummaryF1L1.txt:md5,03e5fd0c1e3079c5f8c7b4d0501b37ff",
- "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1",
- "Stats.json:md5,8e5f038b8aa9e465599d3575f930e604"
- ]
- ]
- ],
- "undetermined": [
-
- ],
- "undetermined_idx": [
-
- ],
- "versions": [
- "versions.yml:md5,12f3dca40b6a65cec6ba51c0fd872152"
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.0",
- "nextflow": "24.04.4"
- },
- "timestamp": "2024-08-05T12:46:23.595844132"
- }
-}
\ No newline at end of file
diff --git a/modules/nf-core/bcl2fastq/tests/nextflow.config b/modules/nf-core/bcl2fastq/tests/nextflow.config
deleted file mode 100644
index 38ad79af..00000000
--- a/modules/nf-core/bcl2fastq/tests/nextflow.config
+++ /dev/null
@@ -1,6 +0,0 @@
-process {
-
- publishDir = { "${params.outdir}/${task.process.tokenize(':')[-1].tokenize('_')[0].toLowerCase()}" }
-
- ext.args = "--tiles s_1_1101"
-}
diff --git a/modules/nf-core/bclconvert/Dockerfile b/modules/nf-core/bclconvert/Dockerfile
index eda84168..c5594cf2 100644
--- a/modules/nf-core/bclconvert/Dockerfile
+++ b/modules/nf-core/bclconvert/Dockerfile
@@ -2,6 +2,24 @@
# Dockerfile to create container with bcl-convert
# Push to nfcore/bclconvert:
+# Build stage: unpack the RPM file
+FROM debian:bullseye-slim AS build
+ARG BCLCONVERT_VERSION="4.4.6"
+
+# Install tools needed to extract RPM
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ rpm2cpio \
+ cpio \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+# Extract bcl-convert from RPM
+COPY bcl-convert-4.4.6-2.el8.x86_64.rpm bcl-convert.rpm
+RUN rpm2cpio bcl-convert.rpm | cpio -idmv \
+ && rm bcl-convert.rpm
+
+# Final stage: minimal image with only necessary components
FROM debian:bullseye-slim
ARG BCLCONVERT_VERSION="4.4.6"
LABEL org.opencontainers.image.description="Docker image containing bcl-convert"
@@ -12,20 +30,16 @@ LABEL org.opencontainers.image.vendor="nf-core"
LABEL org.opencontainers.image.license="https://github.com/nf-core/modules/blob/master/modules/nf-core/bclconvert/LICENSE"
# Disclaimer: this container is not provided nor supported by Illumina
-# 'ps' command is need by some nextflow executions to collect system stats
-# Install procps and clean apt cache
+# Install procps (for 'ps' command needed by Nextflow) and rclone (for parallel file transfers)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
procps \
- rpm2cpio \
- cpio \
+ rclone \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
+
# Link hostname cmd to fix hardcoded path
RUN ln -s /bin/hostname /usr/bin/hostname
-# Install bcl-convert
-COPY bcl-convert-4.4.6-2.el8.x86_64.rpm bcl-convert.rpm
-SHELL ["/bin/bash", "-o", "pipefail", "-c"]
-RUN rpm2cpio bcl-convert.rpm | cpio -idmv \
- && rm bcl-convert.rpm
-RUN rm -rf /var/log/bcl-convert && ln -sfT /tmp /var/log/bcl-convert
+
+# Copy bcl-convert executable from build stage
+COPY --from=build /usr/bin/bcl-convert /usr/bin/bcl-convert
diff --git a/modules/nf-core/bclconvert/bclconvert.diff b/modules/nf-core/bclconvert/bclconvert.diff
deleted file mode 100644
index caa6b812..00000000
--- a/modules/nf-core/bclconvert/bclconvert.diff
+++ /dev/null
@@ -1,107 +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
-@@ -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"
-@@ -8,14 +8,14 @@
- tuple val(meta), path(samplesheet), path(run_dir)
-
- output:
-- tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz") , emit: fastq
-- 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") , emit: reports
-- tuple val(meta), path("output/Logs") , emit: logs
-- tuple val(meta), path("output/InterOp/*.bin") , emit: interop , optional:true
-- path("versions.yml") , emit: versions
-+ tuple val(meta), path("output/**_S[1-9]*_R?_00?.fastq.gz"), emit: fastq
-+ 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/*"), emit: reports
-+ tuple val(meta), path("output/Logs/*"), emit: logs
-+ tuple val(meta), path("output/InterOp/*.bin"), emit: interop, optional: true
-+ path ("versions.yml"), emit: versions
-
- when:
- task.ext.when == null || task.ext.when
-@@ -23,7 +23,7 @@
- script:
- // Exit if running this module with -profile conda / -profile mamba
- if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) {
-- error "BCLCONVERT module does not support Conda. Please use Docker / Singularity / Podman instead."
-+ error("BCLCONVERT module does not support Conda. Please use Docker / Singularity / Podman instead.")
- }
- def args = task.ext.args ?: ''
- def args2 = task.ext.args2 ?: ''
-@@ -37,27 +37,27 @@
-
- if ${input_tar}; then
- ## Ensures --strip-components only applied when top level of tar contents is a directory
-- ## If just files or multiple directories, place all in $input_dir
-+ ## If just files or multiple directories, place all in ${input_dir}
-
- if [[ \$(tar -taf ${run_dir} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then
- tar \\
-- -C $input_dir --strip-components 1 \\
-+ -C ${input_dir} --strip-components 1 \\
- -xavf \\
-- $args2 \\
-- $run_dir \\
-- $args3
-+ ${args2} \\
-+ ${run_dir} \\
-+ ${args3}
- else
- tar \\
-- -C $input_dir \\
-+ -C ${input_dir} \\
- -xavf \\
-- $args2 \\
-- $run_dir \\
-- $args3
-+ ${args2} \\
-+ ${run_dir} \\
-+ ${args3}
- fi
- fi
-
- bcl-convert \\
-- $args \\
-+ ${args} \\
- --output-directory output \\
- --bcl-input-directory ${input_dir} \\
- --sample-sheet ${samplesheet}
-@@ -107,5 +107,4 @@
- bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
- END_VERSIONS
- """
--
- }
-
-'modules/nf-core/bclconvert/tests/main.nf.test.snap' is unchanged
-Changes in 'bclconvert/tests/nextflow.config':
---- modules/nf-core/bclconvert/tests/nextflow.config
-+++ modules/nf-core/bclconvert/tests/nextflow.config
-@@ -1,5 +1,5 @@
- process {
-- withName: "BCLCONVERT" {
-+ withName: BCLCONVERT {
- ext.args = params.module_args
- }
- }
-
-'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 6b164908..6f207277 100644
--- a/modules/nf-core/bclconvert/main.nf
+++ b/modules/nf-core/bclconvert/main.nf
@@ -12,10 +12,10 @@ 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/*"), emit: reports
- tuple val(meta), path("output/Logs/*"), emit: logs
+ 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/InterOp/*.bin"), emit: interop, optional: true
- path ("versions.yml"), emit: versions
+ tuple val("${task.process}"), val('bclconvert'), eval("bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //'"), topic: versions, emit: versions_bclconvert
when:
task.ext.when == null || task.ext.when
@@ -65,46 +65,83 @@ process BCLCONVERT {
# copy the InterOp folder contents to ensure it gets picked up when using fusion
mkdir -p output/InterOp/
cp -n **/InterOp/*.bin output/InterOp/
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
- END_VERSIONS
"""
stub:
"""
+ mkdir -p output
+ echo "fake fastq file" | gzip > output/Sample1_S1_L001_R1_001.fastq.gz
+ echo "fake fastq file" | gzip > output/Undetermined_S0_L001_R1_001.fastq.gz
+
mkdir -p output/Reports
+ echo "fake report file" > output/Reports/Adapter_Cycle_Metrics.csv
+ echo "fake report file" > output/Reports/Adapter_Metrics.csv
+ echo "fake report file" > output/Reports/Demultiplex_Stats.csv
+ echo "fake report file" > output/Reports/Demultiplex_Tile_Stats.csv
+ echo "fake report file" > output/Reports/fastq_list.csv
+ echo "fake report file" > output/Reports/Index_Hopping_Counts.csv
+ echo "fake report file" > output/Reports/IndexMetricsOut.bin
+ echo "fake report file" > output/Reports/Quality_Metrics.csv
+ echo "fake report file" > output/Reports/Quality_Tile_Metrics.csv
+ echo "fake report file" > output/Reports/RunInfo.xml
+ echo "fake report file" > output/Reports/SampleSheet.csv
+ echo "fake report file" > output/Reports/Top_Unknown_Barcodes.csv
+
mkdir -p output/Logs
- echo "" | gzip > output/Sample1_S1_L001_R1_001.fastq.gz
- echo "" | gzip > output/Undetermined_S0_L001_R1_001.fastq.gz
- touch output/Reports/Adapter_Cycle_Metrics.csv
- touch output/Reports/Adapter_Metrics.csv
- touch output/Reports/Demultiplex_Stats.csv
- touch output/Reports/Demultiplex_Tile_Stats.csv
- touch output/Reports/fastq_list.csv
- touch output/Reports/Index_Hopping_Counts.csv
- touch output/Reports/IndexMetricsOut.bin
- touch output/Reports/Quality_Metrics.csv
- touch output/Reports/Quality_Tile_Metrics.csv
- touch output/Reports/RunInfo.xml
- touch output/Reports/SampleSheet.csv
- touch output/Reports/Top_Unknown_Barcodes.csv
- touch output/Logs/Errors.log
- touch output/Logs/FastqComplete.log
- touch output/Logs/Info.log
- touch output/Logs/Warnings.log
+ echo "fake log file" > output/Logs/Errors.log
+ echo "fake log file" > output/Logs/FastqComplete.log
+ echo "fake log file" > output/Logs/Info.log
+ echo "fake log file" > output/Logs/Warnings.log
+
mkdir -p output/InterOp
- touch output/InterOp/ControlMetricsOut.bin
- touch output/InterOp/CorrectedIntMetricsOut.bin
- touch output/InterOp/ErrorMetricsOut.bin
- touch output/InterOp/ExtractionMetricsOut.bin
- touch output/InterOp/IndexMetricsOut.bin
- touch output/InterOp/QMetricsOut.bin
- touch output/InterOp/TileMetricsOut.bin
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bclconvert: \$(bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //')
- END_VERSIONS
+ echo "fake InterOp file" > output/InterOp/ControlMetricsOut.bin
+ echo "fake InterOp file" > output/InterOp/CorrectedIntMetricsOut.bin
+ echo "fake InterOp file" > output/InterOp/ErrorMetricsOut.bin
+ echo "fake InterOp file" > output/InterOp/ExtractionMetricsOut.bin
+ echo "fake InterOp file" > output/InterOp/IndexMetricsOut.bin
+ echo "fake InterOp file" > output/InterOp/QMetricsOut.bin
+ echo "fake InterOp file" > output/InterOp/TileMetricsOut.bin
"""
}
+
+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 = []
+ 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"
+
+ // 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]
+ }
+ }
+ 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()]
+ }
+}
diff --git a/modules/nf-core/bclconvert/meta.yml b/modules/nf-core/bclconvert/meta.yml
index e1cd3e01..a483715a 100644
--- a/modules/nf-core/bclconvert/meta.yml
+++ b/modules/nf-core/bclconvert/meta.yml
@@ -9,7 +9,8 @@ tools:
description: "Demultiplex Illumina BCL files"
homepage: "https://support.illumina.com/sequencing/sequencing_software/bcl-convert.html"
documentation: "https://support-docs.illumina.com/SW/BCL_Convert/Content/SW/FrontPages/BCL_Convert.htm"
- licence: ["ILLUMINA"]
+ licence:
+ - "ILLUMINA"
identifier: ""
input:
- - meta:
@@ -22,7 +23,7 @@ input:
description: "Input samplesheet"
pattern: "*.{csv}"
ontologies:
- - edam: http://edamontology.org/format_3752 # CSV
+ - edam: http://edamontology.org/format_3752 #CSV
- run_dir:
type: file
description: |
@@ -39,7 +40,7 @@ output:
description: Demultiplexed sample FASTQ files
pattern: "**_S*_L00?_R?_00?.fastq.gz"
ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
+ - edam: http://edamontology.org/format_1930 #FASTQ
fastq_idx:
- - meta:
type: map
@@ -49,7 +50,7 @@ output:
description: Optional demultiplexed index FASTQ files
pattern: "**_S*_L00?_I?_00?.fastq.gz"
ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
+ - edam: http://edamontology.org/format_1930 #FASTQ
undetermined:
- - meta:
type: map
@@ -59,7 +60,7 @@ output:
description: Optional undetermined sample FASTQ files
pattern: "Undetermined_S0_L00?_R?_00?.fastq.gz"
ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
+ - edam: http://edamontology.org/format_1930 #FASTQ
undetermined_idx:
- - meta:
type: map
@@ -69,43 +70,60 @@ output:
description: Optional undetermined index FASTQ files
pattern: "Undetermined_S0_L00?_I?_00?.fastq.gz"
ontologies:
- - edam: http://edamontology.org/format_3989 # GZIP format
+ - edam: http://edamontology.org/format_1930 #FASTQ
reports:
- - meta:
type: map
description: Groovy Map containing sample information
- - output/Reports:
+ - output/Reports/*.{csv,xml,bin}:
type: file
description: Demultiplexing Reports
- pattern: "Reports/*.{csv,xml}"
+ pattern: "Reports/*.{csv,xml,bin}"
ontologies:
- - edam: http://edamontology.org/format_3752 # CSV
- - edam: http://edamontology.org/format_2332 # XML
+ - edam: http://edamontology.org/format_3752 #CSV
+ - edam: http://edamontology.org/format_2332 #XML
+ - edam: http://edamontology.org/format_2333 #BINARY
logs:
- - meta:
type: map
description: Groovy Map containing sample information
- - output/Logs:
+ - output/Logs/*.{log,txt}:
type: file
- description: Log files
+ description: Demultiplexing Logs
pattern: "Logs/*.{log,txt}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2330 #TEXT
interop:
- - meta:
type: map
description: Groovy Map containing sample information
- - "output/InterOp/*.bin":
+ - output/InterOp/*.bin:
type: file
description: Interop files
- pattern: "*.{bin}"
- ontologies: []
+ pattern: "InterOp/*.bin"
+ ontologies:
+ - edam: http://edamontology.org/format_2333 #BINARY
+ versions_bclconvert:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bclconvert:
+ type: string
+ description: The name of the tool
+ - bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bclconvert:
+ type: string
+ description: The name of the tool
+ - bcl-convert -V 2>&1 | head -n 1 | sed 's/^.*Version //':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/bclconvert/tests/main.nf.test b/modules/nf-core/bclconvert/tests/main.nf.test
index b2971c02..56ec207a 100644
--- a/modules/nf-core/bclconvert/tests/main.nf.test
+++ b/modules/nf-core/bclconvert/tests/main.nf.test
@@ -33,13 +33,10 @@ nextflow_process {
process.out.fastq_idx,
process.out.undetermined.collect { meta, fastq -> file(fastq).name },
process.out.undetermined_idx,
- process.out.reports,
- process.out.logs.collect { meta, logs -> file(logs).list().sort() },
- process.out.interop.collect { meta, interop ->
- interop.findAll { interopfile ->
- file(interopfile).name != "IndexMetricsOut.bin" } },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ 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.interop.collect {meta, files -> files.collect { file(it).name }.sort() },
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -75,14 +72,10 @@ nextflow_process {
process.out.fastq_idx,
process.out.undetermined.collect { meta, fastq -> file(fastq).name },
process.out.undetermined_idx,
- process.out.reports,
- process.out.logs.collect { meta, logs -> file(logs).list().sort() },
- process.out.interop,
- process.out.interop.collect { meta, interop ->
- interop.findAll { interopfile ->
- file(interopfile).name != "IndexMetricsOut.bin" } },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ 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.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 b7838a5e..43233d59 100644
--- a/modules/nf-core/bclconvert/tests/main.nf.test.snap
+++ b/modules/nf-core/bclconvert/tests/main.nf.test.snap
@@ -20,24 +20,19 @@
],
[
[
- {
- "id": "test"
- },
- [
- "Adapter_Cycle_Metrics.csv:md5,05fbe7b2b0acdd557d355b448aa88ace",
- "Adapter_Metrics.csv:md5,0fa4ac708955417af9d18cec4955552f",
- "Demultiplex_Detailed_Stats.csv:md5,5a6a4d66a96256ff71e4f649927fb112",
- "Demultiplex_Stats.csv:md5,4a3f451faa098156623b55b0f2ff27ee",
- "Demultiplex_Tile_Stats.csv:md5,f91fb0c7a2c5588ed43c7f9145d004ee",
- "IndexMetricsOut.bin:md5,fb16c8a9873e5b5950ae5949126af76c",
- "Index_Hopping_Counts.csv:md5,f59474d96afe8218c7590bb240b19690",
- "Quality_Metrics.csv:md5,c4622066f85d93b1661c928a46cfc508",
- "Quality_Tile_Metrics.csv:md5,e22bc5e2f147695150b02afcccb38c4f",
- "RunInfo.xml:md5,f283cb4600235db9261ee1e319b1407e",
- "SampleSheet.csv:md5,4113eabae23136cc819c7f15ac5b6aad",
- "Top_Unknown_Barcodes.csv:md5,37dbc2860c640fc721820b0217ea0504",
- "fastq_list.csv:md5,482cf7fe9b304a900e4ede3bb25b4912"
- ]
+ "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"
]
],
[
@@ -50,62 +45,39 @@
],
[
[
- {
- "id": "test"
- },
- [
- "BasecallingMetricsOut.bin:md5,7fb651325cba614d497d376eaf43fef4",
- "CorrectedIntMetricsOut.bin:md5,dc8d57282ba9ece9e5fc58a92aa2ac52",
- "EmpiricalPhasingMetricsOut.bin:md5,1ef4631faf0a3a3beb31b10fc38a734d",
- "EventMetricsOut.bin:md5,dee320ce29bdadde44589aa9439f53ab",
- "ExtendedTileMetricsOut.bin:md5,f01d1a9cf8445adf719e652ad7304cf2",
- "ExtractionMetricsOut.bin:md5,972f4082ad950baaf42a6d28517d28a8",
- "FWHMGridMetricsOut.bin:md5,6e297bafcd845bfd0440d08e1bb27685",
- "ImageMetricsOut.bin:md5,ac5d1f0a1f611c0c7c9dd8e6b9e701b1",
- "IndexMetricsOut.bin:md5,6d95975d5909eb88f824e6dc8066457d",
- "OpticalModelMetricsOut.bin:md5,3eaea5fcf2d353950b1e720c73695ccb",
- "PFGridMetricsOut.bin:md5,ae469858ee96ffafbcaf3afb814bdab2",
- "QMetrics2030Out.bin:md5,438248760db58917b32f4eccc6c64c39",
- "QMetricsByLaneOut.bin:md5,e8254cb4a27846710a2a143296be2d8f",
- "QMetricsOut.bin:md5,8f6b83028a42be721200a598161ac5c6",
- "RegistrationMetricsOut.bin:md5,b5ebd957aed067b6403d851ba2ce0139",
- "TileMetricsOut.bin:md5,21388348d81fa9be326d30ef6d348464"
- ]
- ]
- ],
- [
- [
- "BasecallingMetricsOut.bin:md5,7fb651325cba614d497d376eaf43fef4",
- "CorrectedIntMetricsOut.bin:md5,dc8d57282ba9ece9e5fc58a92aa2ac52",
- "EmpiricalPhasingMetricsOut.bin:md5,1ef4631faf0a3a3beb31b10fc38a734d",
- "EventMetricsOut.bin:md5,dee320ce29bdadde44589aa9439f53ab",
- "ExtendedTileMetricsOut.bin:md5,f01d1a9cf8445adf719e652ad7304cf2",
- "ExtractionMetricsOut.bin:md5,972f4082ad950baaf42a6d28517d28a8",
- "FWHMGridMetricsOut.bin:md5,6e297bafcd845bfd0440d08e1bb27685",
- "ImageMetricsOut.bin:md5,ac5d1f0a1f611c0c7c9dd8e6b9e701b1",
- "OpticalModelMetricsOut.bin:md5,3eaea5fcf2d353950b1e720c73695ccb",
- "PFGridMetricsOut.bin:md5,ae469858ee96ffafbcaf3afb814bdab2",
- "QMetrics2030Out.bin:md5,438248760db58917b32f4eccc6c64c39",
- "QMetricsByLaneOut.bin:md5,e8254cb4a27846710a2a143296be2d8f",
- "QMetricsOut.bin:md5,8f6b83028a42be721200a598161ac5c6",
- "RegistrationMetricsOut.bin:md5,b5ebd957aed067b6403d851ba2ce0139",
- "TileMetricsOut.bin:md5,21388348d81fa9be326d30ef6d348464"
+ "BasecallingMetricsOut.bin",
+ "CorrectedIntMetricsOut.bin",
+ "EmpiricalPhasingMetricsOut.bin",
+ "EventMetricsOut.bin",
+ "ExtendedTileMetricsOut.bin",
+ "ExtractionMetricsOut.bin",
+ "FWHMGridMetricsOut.bin",
+ "ImageMetricsOut.bin",
+ "IndexMetricsOut.bin",
+ "OpticalModelMetricsOut.bin",
+ "PFGridMetricsOut.bin",
+ "QMetrics2030Out.bin",
+ "QMetricsByLaneOut.bin",
+ "QMetricsOut.bin",
+ "RegistrationMetricsOut.bin",
+ "TileMetricsOut.bin"
]
],
- [
- "versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
- ],
{
- "BCLCONVERT": {
- "bclconvert": "4.4.6"
- }
+ "versions_bclconvert": [
+ [
+ "BCLCONVERT",
+ "bclconvert",
+ "4.4.6"
+ ]
+ ]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-09-23T10:12:42.943671245"
+ "timestamp": "2026-02-17T16:59:36.617127"
},
"homo_sapiens illumina [bcl] - stub": {
"content": [
@@ -116,7 +88,7 @@
"id": "test",
"lane": 1
},
- "Sample1_S1_L001_R1_001.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "Sample1_S1_L001_R1_001.fastq.gz:md5,1495c2d7a9b129c0968b84b149991bfc"
]
],
"1": [
@@ -128,7 +100,7 @@
"id": "test",
"lane": 1
},
- "Undetermined_S0_L001_R1_001.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "Undetermined_S0_L001_R1_001.fastq.gz:md5,1495c2d7a9b129c0968b84b149991bfc"
]
],
"3": [
@@ -141,18 +113,18 @@
"lane": 1
},
[
- "Adapter_Cycle_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Adapter_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Demultiplex_Stats.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Demultiplex_Tile_Stats.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Index_Hopping_Counts.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Quality_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Quality_Tile_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "RunInfo.xml:md5,d41d8cd98f00b204e9800998ecf8427e",
- "SampleSheet.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Top_Unknown_Barcodes.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "fastq_list.csv:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "Adapter_Cycle_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Adapter_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Demultiplex_Stats.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Demultiplex_Tile_Stats.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "IndexMetricsOut.bin:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Index_Hopping_Counts.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Quality_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Quality_Tile_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "RunInfo.xml:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "SampleSheet.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Top_Unknown_Barcodes.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "fastq_list.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656"
]
]
],
@@ -163,10 +135,10 @@
"lane": 1
},
[
- "Errors.log:md5,d41d8cd98f00b204e9800998ecf8427e",
- "FastqComplete.log:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Info.log:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Warnings.log:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "Errors.log:md5,775935cbff2e455fde1d28930143e14f",
+ "FastqComplete.log:md5,775935cbff2e455fde1d28930143e14f",
+ "Info.log:md5,775935cbff2e455fde1d28930143e14f",
+ "Warnings.log:md5,775935cbff2e455fde1d28930143e14f"
]
]
],
@@ -177,18 +149,22 @@
"lane": 1
},
[
- "ControlMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "CorrectedIntMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "ErrorMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "ExtractionMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "QMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "TileMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "ControlMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "CorrectedIntMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "ErrorMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "ExtractionMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "IndexMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "QMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "TileMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5"
]
]
],
"7": [
- "versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
+ [
+ "BCLCONVERT",
+ "bclconvert",
+ "4.4.6"
+ ]
],
"fastq": [
[
@@ -196,7 +172,7 @@
"id": "test",
"lane": 1
},
- "Sample1_S1_L001_R1_001.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "Sample1_S1_L001_R1_001.fastq.gz:md5,1495c2d7a9b129c0968b84b149991bfc"
]
],
"fastq_idx": [
@@ -209,13 +185,13 @@
"lane": 1
},
[
- "ControlMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "CorrectedIntMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "ErrorMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "ExtractionMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "QMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "TileMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "ControlMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "CorrectedIntMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "ErrorMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "ExtractionMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "IndexMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "QMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5",
+ "TileMetricsOut.bin:md5,c38bb88125390922fc469f5c8432b2a5"
]
]
],
@@ -226,10 +202,10 @@
"lane": 1
},
[
- "Errors.log:md5,d41d8cd98f00b204e9800998ecf8427e",
- "FastqComplete.log:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Info.log:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Warnings.log:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "Errors.log:md5,775935cbff2e455fde1d28930143e14f",
+ "FastqComplete.log:md5,775935cbff2e455fde1d28930143e14f",
+ "Info.log:md5,775935cbff2e455fde1d28930143e14f",
+ "Warnings.log:md5,775935cbff2e455fde1d28930143e14f"
]
]
],
@@ -240,18 +216,18 @@
"lane": 1
},
[
- "Adapter_Cycle_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Adapter_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Demultiplex_Stats.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Demultiplex_Tile_Stats.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "IndexMetricsOut.bin:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Index_Hopping_Counts.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Quality_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Quality_Tile_Metrics.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "RunInfo.xml:md5,d41d8cd98f00b204e9800998ecf8427e",
- "SampleSheet.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "Top_Unknown_Barcodes.csv:md5,d41d8cd98f00b204e9800998ecf8427e",
- "fastq_list.csv:md5,d41d8cd98f00b204e9800998ecf8427e"
+ "Adapter_Cycle_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Adapter_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Demultiplex_Stats.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Demultiplex_Tile_Stats.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "IndexMetricsOut.bin:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Index_Hopping_Counts.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Quality_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Quality_Tile_Metrics.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "RunInfo.xml:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "SampleSheet.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "Top_Unknown_Barcodes.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656",
+ "fastq_list.csv:md5,f6efb28f2f9dcd1d0cb85b78f33aa656"
]
]
],
@@ -261,22 +237,26 @@
"id": "test",
"lane": 1
},
- "Undetermined_S0_L001_R1_001.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
+ "Undetermined_S0_L001_R1_001.fastq.gz:md5,1495c2d7a9b129c0968b84b149991bfc"
]
],
"undetermined_idx": [
],
- "versions": [
- "versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
+ "versions_bclconvert": [
+ [
+ "BCLCONVERT",
+ "bclconvert",
+ "4.4.6"
+ ]
]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-09-23T10:12:55.362214653"
+ "timestamp": "2026-02-17T14:13:11.717962"
},
"homo_sapiens illumina [bcl]": {
"content": [
@@ -300,25 +280,19 @@
],
[
[
- {
- "id": "test",
- "lane": 1
- },
- [
- "Adapter_Cycle_Metrics.csv:md5,5a0c88793b4a0885fe3dda16609b576e",
- "Adapter_Metrics.csv:md5,989240b8840b2169ac1061f952c90f6c",
- "Demultiplex_Detailed_Stats.csv:md5,fda7961f2958545daa94b55b84c99eb1",
- "Demultiplex_Stats.csv:md5,93949a8cd96f907d83e0808c1ec2a04b",
- "Demultiplex_Tile_Stats.csv:md5,d966f774c438485907ae22ac34b85722",
- "IndexMetricsOut.bin:md5,9e688c58a5487b8eaf69c9e1005ad0bf",
- "Index_Hopping_Counts.csv:md5,1059369e375fd8f8423c0f6c934be978",
- "Quality_Metrics.csv:md5,6614accb1bb414fe312b17b81f5521f7",
- "Quality_Tile_Metrics.csv:md5,cdc89fd2962bdd4a24f71e186112118a",
- "RunInfo.xml:md5,03038959f4dd181c86bc97ae71fe270a",
- "SampleSheet.csv:md5,dc0dffd39541dd6cc5b4801d768a8d2b",
- "Top_Unknown_Barcodes.csv:md5,2e2faba761137f228e56bd3428453ccc",
- "fastq_list.csv:md5,ae1470cd741e33b87a4ad26f849a50f9"
- ]
+ "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"
]
],
[
@@ -331,27 +305,29 @@
],
[
[
- "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953",
- "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434",
- "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286",
- "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99",
- "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c",
- "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c"
+ "ControlMetricsOut.bin",
+ "CorrectedIntMetricsOut.bin",
+ "ErrorMetricsOut.bin",
+ "ExtractionMetricsOut.bin",
+ "IndexMetricsOut.bin",
+ "QMetricsOut.bin",
+ "TileMetricsOut.bin"
]
],
- [
- "versions.yml:md5,a7ddd79ad04a69cb254185a11296f1b6"
- ],
{
- "BCLCONVERT": {
- "bclconvert": "4.4.6"
- }
+ "versions_bclconvert": [
+ [
+ "BCLCONVERT",
+ "bclconvert",
+ "4.4.6"
+ ]
+ ]
}
],
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.3",
+ "nextflow": "25.10.4"
},
- "timestamp": "2025-09-23T10:12:18.369689549"
+ "timestamp": "2026-02-17T16:59:10.205948"
}
}
\ No newline at end of file
diff --git a/subworkflows/nf-core/bcl_demultiplex/main.nf b/subworkflows/nf-core/bcl_demultiplex/main.nf
deleted file mode 100644
index bfe1ae83..00000000
--- a/subworkflows/nf-core/bcl_demultiplex/main.nf
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env nextflow
-
-//
-// Demultiplex Illumina BCL data using bcl-convert or bcl2fastq
-//
-
-include { BCLCONVERT } from "../../../modules/nf-core/bclconvert/main"
-include { BCL2FASTQ } from "../../../modules/nf-core/bcl2fastq/main"
-
-workflow BCL_DEMULTIPLEX {
- take:
- ch_flowcell // [[id:"", lane:""], samplesheet.csv, path/to/bcl/files]
- demultiplexer // bclconvert or bcl2fastq
-
- main:
- ch_versions = channel.empty()
- ch_fastq = channel.empty()
- ch_reports = channel.empty()
- ch_stats = channel.empty()
- ch_interop = channel.empty()
- ch_logs = channel.empty()
-
- // Split flowcells into separate channels containing run as tar and run as path
- // https://nextflow.slack.com/archives/C02T98A23U7/p1650963988498929
- ch_flowcell
- .branch { _meta, _samplesheet, run ->
- tar: run.toString().endsWith(".tar.gz")
- dir: true
- }.set { ch_flowcells }
-
- ch_flowcells.tar
- .multiMap { meta, samplesheet, run ->
- samplesheets: [ meta, samplesheet ]
- run_dirs: [ meta, run ]
- }.set { ch_flowcells_tar }
-
- // Runs when run_dir is a tar archive
- // Re-join the metadata and the untarred run directory with the samplesheet
- ch_flowcells_tar_merged = ch_flowcells_tar
- .samplesheets
- .join( ch_flowcells_tar.run_dirs )
-
- // Merge the two channels back together
- ch_flowcells = ch_flowcells.dir.mix(ch_flowcells_tar_merged)
-
- // MODULE: bclconvert
- // Demultiplex the bcl files
- if (demultiplexer == "bclconvert") {
- BCLCONVERT( ch_flowcells )
- ch_fastq = ch_fastq.mix(BCLCONVERT.out.fastq)
- ch_interop = ch_interop.mix(BCLCONVERT.out.interop)
- ch_reports = ch_reports.mix(BCLCONVERT.out.reports)
- ch_logs = ch_logs.mix(BCLCONVERT.out.logs)
- ch_versions = ch_versions.mix(BCLCONVERT.out.versions.first())
- }
-
- // MODULE: bcl2fastq
- // Demultiplex the bcl files
- if (demultiplexer == "bcl2fastq") {
- BCL2FASTQ( ch_flowcells )
- ch_fastq = ch_fastq.mix(BCL2FASTQ.out.fastq)
- ch_interop = ch_interop.mix(BCL2FASTQ.out.interop)
- ch_reports = ch_reports.mix(BCL2FASTQ.out.reports)
- ch_stats = ch_stats.mix(BCL2FASTQ.out.stats)
- ch_versions = ch_versions.mix(BCL2FASTQ.out.versions.first())
- }
-
- // Generate meta for each fastq
- ch_fastq
- // reshapes the channel from a single emit of [meta, [fastq, fastq, fastq...]]
- // to emits per fastq file like [meta, fastq]
- .transpose()
- .map { fc_meta, fastq ->
- def meta = [:]
- meta.id = fastq.getSimpleName().toString() - ~/_R[0-9]_001.*$/
- meta.samplename = fastq.getSimpleName().toString() - ~/_S[0-9]+.*$/
- meta.fcid = fc_meta.id
- meta.lane = fc_meta.lane
- // The buffered input stream allows reading directly from cloud storage
- // It will not make a local copy of the file.
- def line = ""
- fastq.withInputStream { fq ->
- def gzipStream = new java.util.zip.GZIPInputStream(fq)
- def decoder = new InputStreamReader(gzipStream, 'ASCII')
- def buffered = new BufferedReader(decoder)
- line = buffered.readLine()
- buffered.close()
- }
- if ( line != null && line.startsWith('@') ) {
- line = line.substring(1)
- // expected format is like:
- // xx:yy:FLOWCELLID:LANE:... (seven fields)
- def fields = line.split(':')
- // 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_nubmer = fields[1]
- def fcid = fields[2]
- def lane = fields[3]
- def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
- def ID = [fcid, lane].join(".")
- def PU = [fcid, lane, index].findAll().join(".")
- def PL = "ILLUMINA"
- def SM = fastq.getSimpleName().toString() - ~/_S[0-9]+.*$/
- meta.readgroup = [
- "ID": ID,
- "SM": SM,
- "PL": PL,
- "PU": PU
- ]
- meta.empty = false
- } else {
- println "No reads were found in FASTQ file: ${fastq}"
- meta.readgroup = [:]
- meta.empty = true
- }
- return [meta, fastq]
- }
- // Group by the meta id so that we can find mate pairs if they exist
- .groupTuple(by: [0])
- .map { meta, fastq ->
- meta.single_end = fastq.size() == 1
- return [meta, fastq.flatten()]
- }
- .branch { meta, _fastq ->
- fastq : meta.empty == false
- empty_fastq : meta.empty == true
- }
- .set{ch_fastq_with_meta}
-
- emit:
- fastq = ch_fastq_with_meta.fastq
- empty_fastq = ch_fastq_with_meta.empty_fastq
- reports = ch_reports
- stats = ch_stats
- interop = ch_interop
- logs = ch_logs
- versions = ch_versions
-}
diff --git a/subworkflows/nf-core/bcl_demultiplex/meta.yml b/subworkflows/nf-core/bcl_demultiplex/meta.yml
deleted file mode 100644
index 856f5204..00000000
--- a/subworkflows/nf-core/bcl_demultiplex/meta.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json
-name: "bcl_demultiplex"
-description: Demultiplex Illumina BCL data using bcl-convert or bcl2fastq
-keywords:
- - bcl
- - bclconvert
- - bcl2fastq
- - demultiplex
- - fastq
-components:
- - bcl2fastq
- - bclconvert
-input:
- - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'string', lane: int ]
- - samplesheet:
- type: file
- description: |
- CSV file containing information about samples to be demultiplexed in Illumina SampleSheet format
- - flowcell:
- type: file
- description: Directory or tar archive containing Illumina BCL data, sequencer output directory
- - demultiplexer:
- type: string
- description: Which demultiplexer to use, bcl2fastq or bclconvert
-output:
- - meta:
- type: map
- description: |
- Groovy Map containing sample information
- e.g. [ id:'test' ]
- - fastq:
- type: file
- description: Demultiplexed fastq files
- pattern: "*.fastq.gz"
- - reports:
- type: file
- description: Demultiplexing reports
- pattern: "Reports/*"
- - interop:
- type: file
- description: InterOp files
- pattern: "InterOp/*"
- - stats:
- type: file
- description: Demultiplexing statistics (bcl2fastq only)
- pattern: "Stats/*"
- - logs:
- type: file
- description: Demultiplexing logs (bclconvert only)
- pattern: "Logs/*"
- - versions:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
-authors:
- - "@matthdsm"
-maintainers:
- - "@matthdsm"
diff --git a/subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test b/subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test
deleted file mode 100644
index 65a158e9..00000000
--- a/subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test
+++ /dev/null
@@ -1,100 +0,0 @@
-// nf-core subworkflows test bcl_demultiplex
-nextflow_workflow {
-
- name "Test Subworkflow test_bcl_demultiplex_bclconvert"
- script "../main.nf"
- config "./nextflow.config"
- workflow "BCL_DEMULTIPLEX"
-
- tag "subworkflows"
- tag "subworkflows_nfcore"
- tag "subworkflows/bcl_demultiplex"
- tag "bclconvert"
- tag "bcl2fastq"
-
- test("bclconvert") {
-
- when {
-
- workflow {
- """
- input[0] = Channel.value([
- [id:'HMTFYDRXX', lane:1],
- "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/bcl/SampleSheet.csv",
- "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/illumina/bcl/200624_A00834_0183_BHMTFYDRXX.tar.gz"
- ])
- input[1] = "bclconvert"
- """
- }
- }
-
- then {
- assertAll(
- { assert workflow.success },
- { assert snapshot(
- sanitizeOutput(workflow.out, unstableKeys: ["empty_fastq", "logs"]).collectEntries { key, val ->
- if (key == "interop") {
- return [ key, val.collect { meta, files ->
- [
- meta,
- files.collect { interop_file ->
- if (interop_file.endsWith("IndexMetricsOut.bin")) {
- file(interop_file).name
- } else {
- interop_file
- }
- }
- ]
- } ]
- }
- return [ key, val ]
- },
- ).match()
- },
- )
- }
- }
-
- test("bcl2fastq") {
-
- when {
-
- workflow {
- """
- input[0] = Channel.value([
- [id:'test', lane:1 ],
- "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/homo_sapiens/illumina/bcl/flowcell_samplesheet.csv",
- "https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/homo_sapiens/illumina/bcl/flowcell.tar.gz"
- ])
- input[1] = "bcl2fastq"
- """
- }
- }
-
- then {
- assertAll(
- { assert workflow.success },
- { assert snapshot(
- sanitizeOutput(workflow.out).collectEntries { key, val ->
- if (key == "interop") {
- return [ key, val.collect { meta, files ->
- [
- meta,
- files.collect { interop_file ->
- if (interop_file.endsWith("IndexMetricsOut.bin")) {
- file(interop_file).name
- } else {
- interop_file
- }
- }
- ]
- } ]
- }
- return [ key, val ]
- },
- ).match()
- },
- )
- }
- }
-}
diff --git a/subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test.snap b/subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test.snap
deleted file mode 100644
index 537c7efe..00000000
--- a/subworkflows/nf-core/bcl_demultiplex/tests/main.nf.test.snap
+++ /dev/null
@@ -1,296 +0,0 @@
-{
- "bclconvert": {
- "content": [
- {
- "empty_fastq": [
- [
- {
- "empty": true,
- "fcid": "HMTFYDRXX",
- "id": "SampleZ_S5_L001",
- "lane": 1,
- "readgroup": {
-
- },
- "samplename": "SampleZ",
- "single_end": true
- },
- [
- "SampleZ_S5_L001_R1_001.fastq.gz"
- ]
- ]
- ],
- "fastq": [
- [
- {
- "id": "Sample1_S1_L001",
- "samplename": "Sample1",
- "fcid": "HMTFYDRXX",
- "lane": 1,
- "readgroup": {
- "ID": "HMTFYDRXX.1",
- "SM": "Sample1",
- "PL": "ILLUMINA",
- "PU": "HMTFYDRXX.1.GAACTGAGCG+TCGTGGAGCG"
- },
- "empty": false,
- "single_end": true
- },
- [
- "Sample1_S1_L001_R1_001.fastq.gz:md5,b5489d1964db8db5502eb742cc3ef3ec"
- ]
- ],
- [
- {
- "id": "Sample23_S3_L001",
- "samplename": "Sample23",
- "fcid": "HMTFYDRXX",
- "lane": 1,
- "readgroup": {
- "ID": "HMTFYDRXX.1",
- "SM": "Sample23",
- "PL": "ILLUMINA",
- "PU": "HMTFYDRXX.1.CGTCTCATAT+TATAGTAGCT"
- },
- "empty": false,
- "single_end": true
- },
- [
- "Sample23_S3_L001_R1_001.fastq.gz:md5,767a1091320320b140288066e29bccc5"
- ]
- ],
- [
- {
- "id": "SampleA_S2_L001",
- "samplename": "SampleA",
- "fcid": "HMTFYDRXX",
- "lane": 1,
- "readgroup": {
- "ID": "HMTFYDRXX.1",
- "SM": "SampleA",
- "PL": "ILLUMINA",
- "PU": "HMTFYDRXX.1.AGGTCAGATA+CTACAAGATA"
- },
- "empty": false,
- "single_end": true
- },
- [
- "SampleA_S2_L001_R1_001.fastq.gz:md5,7de2ea88133409f34563f40a0d8c9e55"
- ]
- ],
- [
- {
- "id": "sampletest_S4_L001",
- "samplename": "sampletest",
- "fcid": "HMTFYDRXX",
- "lane": 1,
- "readgroup": {
- "ID": "HMTFYDRXX.1",
- "SM": "sampletest",
- "PL": "ILLUMINA",
- "PU": "HMTFYDRXX.1.ATTCCATAAG+TGCCTGGTGG"
- },
- "empty": false,
- "single_end": true
- },
- [
- "sampletest_S4_L001_R1_001.fastq.gz:md5,c16c7de1b7bffb5e4503f4d94c40f881"
- ]
- ]
- ],
- "interop": [
- [
- {
- "id": "HMTFYDRXX",
- "lane": 1
- },
- [
- "BasecallingMetricsOut.bin:md5,7fb651325cba614d497d376eaf43fef4",
- "CorrectedIntMetricsOut.bin:md5,dc8d57282ba9ece9e5fc58a92aa2ac52",
- "EmpiricalPhasingMetricsOut.bin:md5,1ef4631faf0a3a3beb31b10fc38a734d",
- "EventMetricsOut.bin:md5,dee320ce29bdadde44589aa9439f53ab",
- "ExtendedTileMetricsOut.bin:md5,f01d1a9cf8445adf719e652ad7304cf2",
- "ExtractionMetricsOut.bin:md5,972f4082ad950baaf42a6d28517d28a8",
- "FWHMGridMetricsOut.bin:md5,6e297bafcd845bfd0440d08e1bb27685",
- "ImageMetricsOut.bin:md5,ac5d1f0a1f611c0c7c9dd8e6b9e701b1",
- "IndexMetricsOut.bin",
- "OpticalModelMetricsOut.bin:md5,3eaea5fcf2d353950b1e720c73695ccb",
- "PFGridMetricsOut.bin:md5,ae469858ee96ffafbcaf3afb814bdab2",
- "QMetrics2030Out.bin:md5,438248760db58917b32f4eccc6c64c39",
- "QMetricsByLaneOut.bin:md5,e8254cb4a27846710a2a143296be2d8f",
- "QMetricsOut.bin:md5,8f6b83028a42be721200a598161ac5c6",
- "RegistrationMetricsOut.bin:md5,b5ebd957aed067b6403d851ba2ce0139",
- "TileMetricsOut.bin:md5,21388348d81fa9be326d30ef6d348464"
- ]
- ]
- ],
- "logs": [
- [
- {
- "id": "HMTFYDRXX",
- "lane": 1
- },
- "Logs"
- ]
- ],
- "reports": [
- [
- {
- "id": "HMTFYDRXX",
- "lane": 1
- },
- [
- "Adapter_Cycle_Metrics.csv:md5,05fbe7b2b0acdd557d355b448aa88ace",
- "Adapter_Metrics.csv:md5,0fa4ac708955417af9d18cec4955552f",
- "Demultiplex_Detailed_Stats.csv:md5,5a6a4d66a96256ff71e4f649927fb112",
- "Demultiplex_Stats.csv:md5,4a3f451faa098156623b55b0f2ff27ee",
- "Demultiplex_Tile_Stats.csv:md5,f91fb0c7a2c5588ed43c7f9145d004ee",
- "IndexMetricsOut.bin:md5,fb16c8a9873e5b5950ae5949126af76c",
- "Index_Hopping_Counts.csv:md5,f59474d96afe8218c7590bb240b19690",
- "Quality_Metrics.csv:md5,c4622066f85d93b1661c928a46cfc508",
- "Quality_Tile_Metrics.csv:md5,e22bc5e2f147695150b02afcccb38c4f",
- "RunInfo.xml:md5,f283cb4600235db9261ee1e319b1407e",
- "SampleSheet.csv:md5,4113eabae23136cc819c7f15ac5b6aad",
- "Top_Unknown_Barcodes.csv:md5,37dbc2860c640fc721820b0217ea0504",
- "fastq_list.csv:md5,482cf7fe9b304a900e4ede3bb25b4912"
- ]
- ]
- ],
- "stats": [
-
- ],
- "versions": [
- "versions.yml:md5,b1427a2b3abad63b04f1dd62c8f40e2e"
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
- },
- "timestamp": "2025-11-04T16:13:41.469897018"
- },
- "bcl2fastq": {
- "content": [
- {
- "empty_fastq": [
-
- ],
- "fastq": [
- [
- {
- "id": "Sample1_S1_L001",
- "samplename": "Sample1",
- "fcid": "test",
- "lane": 1,
- "readgroup": {
- "ID": "000000000-K9H97.1",
- "SM": "Sample1",
- "PL": "ILLUMINA",
- "PU": "000000000-K9H97.1"
- },
- "empty": false,
- "single_end": true
- },
- [
- "Sample1_S1_L001_R1_001.fastq.gz:md5,0675fb6365322eaafb33c0f8e862b54b"
- ]
- ]
- ],
- "interop": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- "ControlMetricsOut.bin:md5,6d77b38d0793a6e1ce1e85706e488953",
- "CorrectedIntMetricsOut.bin:md5,2bbf84d3be72734addaa2fe794711434",
- "ErrorMetricsOut.bin:md5,38c88def138e9bb832539911affdb286",
- "ExtractionMetricsOut.bin:md5,7497c3178837eea8f09350b5cd252e99",
- "IndexMetricsOut.bin",
- "QMetricsOut.bin:md5,7e9f198d53ebdfbb699a5f94cf1ed51c",
- "TileMetricsOut.bin:md5,83891751ec1c91a425a524b476b6ca3c"
- ]
- ]
- ],
- "logs": [
-
- ],
- "reports": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- [
- [
- [
- [
- [
- "lane.html:md5,794e48287f47a9f22dcb6b6d0c22c3eb",
- "laneBarcode.html:md5,2bbdae3ee57151eab520c966597d7438"
- ],
- [
-
- ]
- ]
- ],
- [
- [
- [
- "lane.html:md5,f741870307050dcea79a838f5971770f",
- "laneBarcode.html:md5,ffe2e863811c76cb9da27d5d124e0611"
- ],
- [
- "lane.html:md5,cca97e771d3491dbc8cd3fe389595b09",
- "laneBarcode.html:md5,cca97e771d3491dbc8cd3fe389595b09"
- ]
- ],
- [
- [
- "lane.html:md5,c383b0768d9978733d3f5d3b91c15af0",
- "laneBarcode.html:md5,48842c23b9a2816aec540177df870968"
- ],
- [
-
- ]
- ]
- ]
- ],
- "Report.css:md5,eb7d3eb68fc1539f411404987246b59b",
- "index.html:md5,5747c407854ae2c358d0ec201ce622d8",
- "tree.html:md5,a1b9bf592973ca829ec69ddf888b7e34"
- ]
- ]
- ]
- ],
- "stats": [
- [
- {
- "id": "test",
- "lane": 1
- },
- [
- "AdapterTrimming.txt:md5,48ed2b914b1246c0b5d8667525550946",
- "ConversionStats.xml:md5,8fe0f57f3f5d256a0762dba75ac62d05",
- "DemultiplexingStats.xml:md5,2047ff18f5b9107c084de06e9ff943ad",
- "DemuxSummaryF1L1.txt:md5,03e5fd0c1e3079c5f8c7b4d0501b37ff",
- "FastqSummaryF1L1.txt:md5,0c6f2d87ee183b84d1051cde9a5643d1",
- "Stats.json:md5,8e5f038b8aa9e465599d3575f930e604"
- ]
- ]
- ],
- "versions": [
- "versions.yml:md5,513271615cb02dbe541a6202d713ef81"
- ]
- }
- ],
- "meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.10.0"
- },
- "timestamp": "2025-11-04T15:08:58.666466636"
- }
-}
\ No newline at end of file
diff --git a/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config b/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
deleted file mode 100644
index dd8bfa2a..00000000
--- a/subworkflows/nf-core/bcl_demultiplex/tests/nextflow.config
+++ /dev/null
@@ -1,13 +0,0 @@
-process {
- withName: BCLCONVERT {
- ext.args = {[
- meta.lane ? "--bcl-only-lane ${meta.lane}" : "",
- "--force"
- ].join(" ").trim()}
- }
- withName: BCL2FASTQ {
- ext.args = {[
- "--tiles s_1_1101"
- ].join(" ").trim()}
- }
-}
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 3954c603..0702ba02 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -7,6 +7,7 @@ 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'
@@ -17,11 +18,11 @@ include { SAMTOOLS_COVERAGE } from '../modules/nf-core/samtools/coverag
// Subworkflows
include { BAM_QC } from '../subworkflows/local/bam_qc/main'
-include { BCL_DEMULTIPLEX } from '../subworkflows/nf-core/bcl_demultiplex/main'
include { COVERAGE } from '../subworkflows/local/coverage/main'
include { FASTQ_TO_CRAM } from '../subworkflows/local/fastq_to_aligned_cram/main'
// 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'
@@ -70,17 +71,16 @@ workflow PREPROCESSING {
}
.set { ch_illumina_flowcell }
- // BCL_DEMULTIPLEX([meta, samplesheet, flowcell], demultiplexer)
- BCL_DEMULTIPLEX(ch_illumina_flowcell.flowcell, "bclconvert")
- BCL_DEMULTIPLEX.out.fastq.dump(tag: "DEMULTIPLEX: fastq", pretty: true)
+ // 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(
- BCL_DEMULTIPLEX.out.reports,
- BCL_DEMULTIPLEX.out.stats,
+ BCLCONVERT.out.reports,
+ BCLCONVERT.out.stats,
)
- ch_versions = ch_versions.mix(BCL_DEMULTIPLEX.out.versions)
- BCL_DEMULTIPLEX.out.fastq
- .map { meta, fastq -> [meta.samplename, meta, fastq] }
+ generateReadgroup(BCLCONVERT.out.fastq)
+ .map { meta, fastq -> [meta.rg.SM, meta, fastq] }
.set { ch_demultiplexed_fastq }
ch_illumina_flowcell.info
@@ -94,9 +94,6 @@ workflow PREPROCESSING {
.combine(ch_sampleinfo, by: 0)
.map { samplename, meta, fastq, sampleinfo ->
def new_meta = meta + sampleinfo
- def readgroup = readgroup_from_fastq(fastq[0])
- readgroup = readgroup + ['SM': samplename, 'LB': new_meta.library ?: ""]
- new_meta = new_meta + ['readgroup': readgroup]
return [new_meta, fastq]
}
.groupTuple(by: [0])
@@ -490,8 +487,8 @@ def readgroup_from_fastq(path) {
def lane = fields[3]
def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
- rg.ID = [fcid, lane].join(".")
- rg.PU = [fcid, lane, index].findAll().join(".")
+ rg.ID = [index, lane].join(".")
+ rg.PU = [fcid, lane].join(".")
rg.PL = "ILLUMINA"
}
else if (fields.size() == 5) {
From f3791089925f255ad443862824a4931c473aa5a7 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 18 Feb 2026 12:47:55 +0100
Subject: [PATCH 204/228] bump falco
---
modules.json | 2 +-
modules/nf-core/falco/environment.yml | 2 +-
modules/nf-core/falco/main.nf | 37 ++---
modules/nf-core/falco/meta.yml | 38 +++--
modules/nf-core/falco/tests/main.nf.test | 60 ++++---
modules/nf-core/falco/tests/main.nf.test.snap | 154 ++++++++++++++----
workflows/preprocessing.nf | 22 +--
7 files changed, 209 insertions(+), 106 deletions(-)
diff --git a/modules.json b/modules.json
index 448ec404..b7e85768 100644
--- a/modules.json
+++ b/modules.json
@@ -42,7 +42,7 @@
},
"falco": {
"branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "git_sha": "b2f164ca59b14d6e9ed2dd2a99fa015085396faf",
"installed_by": ["modules"]
},
"fastp": {
diff --git a/modules/nf-core/falco/environment.yml b/modules/nf-core/falco/environment.yml
index 59c973a9..1fc00675 100644
--- a/modules/nf-core/falco/environment.yml
+++ b/modules/nf-core/falco/environment.yml
@@ -4,4 +4,4 @@ channels:
- conda-forge
- bioconda
dependencies:
- - bioconda::falco=1.2.1
+ - bioconda::falco=1.2.5
diff --git a/modules/nf-core/falco/main.nf b/modules/nf-core/falco/main.nf
index a4b343b2..860d52ff 100644
--- a/modules/nf-core/falco/main.nf
+++ b/modules/nf-core/falco/main.nf
@@ -1,20 +1,19 @@
process FALCO {
- tag "$meta.id"
+ tag "${meta.id}"
label 'process_single'
-
conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/falco:1.2.1--h867801b_3':
- 'biocontainers/falco:1.2.1--h867801b_3' }"
+ container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container
+ ? 'https://depot.galaxyproject.org/singularity/falco:1.2.5--h077b44d_0'
+ : 'biocontainers/falco:1.2.5--h077b44d_0'}"
input:
tuple val(meta), path(reads)
output:
tuple val(meta), path("*.html"), emit: html
- tuple val(meta), path("*.txt") , emit: txt
- path "versions.yml" , emit: versions
+ tuple val(meta), path("*.txt"), emit: txt
+ tuple val("${task.process}"), val('falco'), eval("falco --version | sed '1!d;s/.* //'"), topic: versions, emit: versions_falco
when:
task.ext.when == null || task.ext.when
@@ -22,23 +21,14 @@ process FALCO {
script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
- if ( reads.toList().size() == 1 ) {
+ if (reads.toList().size() == 1) {
"""
- falco $args --threads $task.cpus ${reads} -D ${prefix}_fastqc_data.txt -S ${prefix}_summary.txt -R ${prefix}_report.html
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- falco:\$( falco --version | sed -e "s/falco//g" )
- END_VERSIONS
+ falco ${args} --threads ${task.cpus} ${reads} -D ${prefix}_fastqc_data.txt -S ${prefix}_summary.txt -R ${prefix}_report.html
"""
- } else {
+ }
+ else {
"""
- falco $args --threads $task.cpus ${reads}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- falco:\$( falco --version | sed -e "s/falco//g" )
- END_VERSIONS
+ falco ${args} --threads ${task.cpus} ${reads}
"""
}
@@ -48,10 +38,5 @@ process FALCO {
touch ${prefix}_data.txt
touch ${prefix}_fastqc_data.html
touch ${prefix}_summary.txt
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- falco: \$( falco --version | sed -e "s/falco v//g" )
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/falco/meta.yml b/modules/nf-core/falco/meta.yml
index 1450f2da..b8574289 100644
--- a/modules/nf-core/falco/meta.yml
+++ b/modules/nf-core/falco/meta.yml
@@ -11,7 +11,8 @@ tools:
of sequence reads."
homepage: "https://falco.readthedocs.io/"
documentation: "https://falco.readthedocs.io/"
- licence: ["GPL v3"]
+ licence:
+ - "GPL v3"
identifier: biotools:falco-rna
input:
- - meta:
@@ -24,7 +25,8 @@ input:
description: |
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_1930
output:
html:
- - meta:
@@ -36,7 +38,8 @@ output:
type: file
description: FastQC like report
pattern: "*_{fastqc_report.html}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_3474
txt:
- - meta:
type: map
@@ -47,14 +50,29 @@ output:
type: file
description: falco report data
pattern: "*_{data.txt}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_3474
+ versions_falco:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - falco:
+ type: string
+ description: The name of the tool
+ - falco --version | sed '1!d;s/.* //':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - falco:
+ type: string
+ description: The name of the tool
+ - falco --version | sed '1!d;s/.* //':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@lucacozzuto"
maintainers:
diff --git a/modules/nf-core/falco/tests/main.nf.test b/modules/nf-core/falco/tests/main.nf.test
index 816c72ba..cc8ed4bf 100644
--- a/modules/nf-core/falco/tests/main.nf.test
+++ b/modules/nf-core/falco/tests/main.nf.test
@@ -15,12 +15,7 @@ nextflow_process {
"""
input[0] = [
[ id: 'test', single_end:true ],
- [
- file(
- params.test_data['sarscov2']['illumina']['test_1_fastq_gz'],
- checkIfExists: true
- ),
- ],
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
]
"""
}
@@ -30,8 +25,9 @@ nextflow_process {
assertAll(
{ assert process.success },
{ assert snapshot(
- process.out.txt,
- file(process.out.html.get(0).get(1)).list(),
+ process.out.txt.collect {meta, files -> files.collect { file(it).name }.sort() },
+ file(process.out.html.get(0).get(1)).name,
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
},
)
@@ -47,14 +43,8 @@ nextflow_process {
input[0] = [
[ id: 'test', single_end:false ],
[
- file(
- params.test_data['sarscov2']['illumina']['test_1_fastq_gz'],
- checkIfExists: true
- ),
- file(
- params.test_data['sarscov2']['illumina']['test_2_fastq_gz'],
- checkIfExists: true
- ),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true),
+ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_2.fastq.gz', checkIfExists: true),
],
]
"""
@@ -65,8 +55,9 @@ nextflow_process {
assertAll(
{ assert process.success },
{ assert snapshot(
- process.out.txt,
- process.out.html.get(0).get(1).collect{ it.split("/")[-1] }.sort(),
+ process.out.txt.collect {meta, files -> files.collect { file(it).name }.sort() },
+ process.out.html.collect {meta, files -> files.collect { file(it).name }.sort() },
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
},
)
@@ -81,12 +72,7 @@ nextflow_process {
"""
input[0] = [
[ id: 'test', single_end:false ],
- [
- file(
- params.test_data['sarscov2']['illumina']['test_interleaved_fastq_gz'],
- checkIfExists: true
- ),
- ],
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_interleaved.fastq.gz', checkIfExists: true)],
]
"""
}
@@ -96,8 +82,9 @@ nextflow_process {
assertAll(
{ assert process.success },
{ assert snapshot(
- process.out.txt,
- file(process.out.html.get(0).get(1)).list(),
+ process.out.txt.collect {meta, files -> files.collect { file(it).name }.sort() },
+ file(process.out.html.get(0).get(1)).name,
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()
},
)
@@ -105,4 +92,25 @@ nextflow_process {
}
+ test("sarscov2 - fastq - single end - stub") {
+ options "-stub"
+ when {
+ process {
+ """
+ input[0] = [
+ [ id: 'test', single_end:true ],
+ [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/fastq/test_1.fastq.gz', checkIfExists: true) ]
+ ]
+ """
+ }
+ }
+
+ then {
+ assertAll(
+ { assert process.success },
+ { assert snapshot(process.out).match() }
+ )
+ }
+ }
+
}
diff --git a/modules/nf-core/falco/tests/main.nf.test.snap b/modules/nf-core/falco/tests/main.nf.test.snap
index 34ac64e3..ea31e454 100644
--- a/modules/nf-core/falco/tests/main.nf.test.snap
+++ b/modules/nf-core/falco/tests/main.nf.test.snap
@@ -3,59 +3,149 @@
"content": [
[
[
- {
- "id": "test",
- "single_end": true
- },
+ "test_fastqc_data.txt",
+ "test_summary.txt"
+ ]
+ ],
+ "test_report.html",
+ {
+ "versions_falco": [
[
- "test_fastqc_data.txt:md5,36d989bb9e2d5a632e19452f4e6c2a4e",
- "test_summary.txt:md5,a925aec214a83d2f6252847166f2ef3a"
+ "FALCO",
+ "falco",
+ "1.2.5"
]
]
- ],
- null
+ }
],
- "timestamp": "2024-02-02T16:28:17.756764"
+ "timestamp": "2026-02-18T11:45:00.791179",
+ "meta": {
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"sarscov2 - fastq - paired end": {
"content": [
[
[
- {
- "id": "test",
- "single_end": false
- },
- [
- "test_1.fastq.gz_fastqc_data.txt:md5,36d989bb9e2d5a632e19452f4e6c2a4e",
- "test_1.fastq.gz_summary.txt:md5,a925aec214a83d2f6252847166f2ef3a",
- "test_2.fastq.gz_fastqc_data.txt:md5,ad5c45dfc8f79754dd5d8029456b715b",
- "test_2.fastq.gz_summary.txt:md5,d0cb642adefb5635a25e808f1f38780a"
- ]
+ "test_1.fastq.gz_fastqc_data.txt",
+ "test_1.fastq.gz_summary.txt",
+ "test_2.fastq.gz_fastqc_data.txt",
+ "test_2.fastq.gz_summary.txt"
]
],
[
- "test_1.fastq.gz_fastqc_report.html",
- "test_2.fastq.gz_fastqc_report.html"
- ]
+ [
+ "test_1.fastq.gz_fastqc_report.html",
+ "test_2.fastq.gz_fastqc_report.html"
+ ]
+ ],
+ {
+ "versions_falco": [
+ [
+ "FALCO",
+ "falco",
+ "1.2.5"
+ ]
+ ]
+ }
],
- "timestamp": "2024-02-02T16:22:11.757473"
+ "timestamp": "2026-02-18T11:45:07.583855",
+ "meta": {
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"sarscov2 - fastq - interleaved": {
"content": [
[
[
- {
- "id": "test",
- "single_end": false
- },
+ "test_fastqc_data.txt",
+ "test_summary.txt"
+ ]
+ ],
+ "test_report.html",
+ {
+ "versions_falco": [
[
- "test_fastqc_data.txt:md5,b5e593f140fe578bdd25ceb84e98fd37",
- "test_summary.txt:md5,ca52f458b1223d89db69e2d5e73cf867"
+ "FALCO",
+ "falco",
+ "1.2.5"
]
]
- ],
- null
+ }
+ ],
+ "timestamp": "2026-02-18T11:45:13.797353",
+ "meta": {
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
+ },
+ "sarscov2 - fastq - single end - stub": {
+ "content": [
+ {
+ "0": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test_fastqc_data.html:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "1": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ [
+ "test_data.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ]
+ ],
+ "2": [
+ [
+ "FALCO",
+ "falco",
+ "1.2.5"
+ ]
+ ],
+ "html": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ "test_fastqc_data.html:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ],
+ "txt": [
+ [
+ {
+ "id": "test",
+ "single_end": true
+ },
+ [
+ "test_data.txt:md5,d41d8cd98f00b204e9800998ecf8427e",
+ "test_summary.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
+ ]
+ ]
+ ],
+ "versions_falco": [
+ [
+ "FALCO",
+ "falco",
+ "1.2.5"
+ ]
+ ]
+ }
],
- "timestamp": "2024-02-02T16:28:36.035899"
+ "timestamp": "2026-02-18T10:45:44.602269",
+ "meta": {
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 0702ba02..51056ddf 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -76,12 +76,15 @@ workflow PREPROCESSING {
BCLCONVERT.out.fastq.dump(tag: "DEMULTIPLEX: fastq", pretty: true)
ch_multiqc_files = ch_multiqc_files.mix(
BCLCONVERT.out.reports,
- BCLCONVERT.out.stats,
+ BCLCONVERT.out.logs,
)
- generateReadgroup(BCLCONVERT.out.fastq)
- .map { meta, fastq -> [meta.rg.SM, meta, fastq] }
- .set { ch_demultiplexed_fastq }
+ generateReadgroup(
+ BCLCONVERT.out.reports.map { meta, reports ->
+ return [meta, reports.find { report -> report.name == "fastq_list.csv" }]
+ },
+ BCLCONVERT.out.fastq,
+ ).map { meta, fastq -> [meta.rg.SM, meta, fastq] }.set { ch_demultiplexed_fastq }
ch_illumina_flowcell.info
.flatten()
@@ -92,7 +95,7 @@ workflow PREPROCESSING {
// Merge fastq meta with sample info
ch_demultiplexed_fastq
.combine(ch_sampleinfo, by: 0)
- .map { samplename, meta, fastq, sampleinfo ->
+ .map { _samplename, meta, fastq, sampleinfo ->
def new_meta = meta + sampleinfo
return [new_meta, fastq]
}
@@ -189,7 +192,6 @@ workflow PREPROCESSING {
FALCO(ch_fastq_per_sample.other)
ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.html)
ch_multiqc_files = ch_multiqc_files.mix(FALCO.out.txt)
- ch_versions = ch_versions.mix(FALCO.out.versions.first())
// MODULE: fastp
// Run QC, trimming and adapter removal
@@ -408,9 +410,9 @@ workflow PREPROCESSING {
)
emit:
- demultiplex_interop = BCL_DEMULTIPLEX.out.interop
- demultiplex_reports = BCL_DEMULTIPLEX.out.reports
- demultiplex_logs = BCL_DEMULTIPLEX.out.logs
+ demultiplex_interop = BCLCONVERT.out.interop
+ demultiplex_reports = BCLCONVERT.out.reports
+ demultiplex_logs = BCLCONVERT.out.logs
demultiplex_fastq = ch_demultiplexed_fastq_with_sampleinfo.other
falco_html = FALCO.out.html
falco_txt = FALCO.out.txt
@@ -487,7 +489,7 @@ def readgroup_from_fastq(path) {
def lane = fields[3]
def index = fields[-1] =~ /[GATC+-]/ ? fields[-1] : ""
- rg.ID = [index, lane].join(".")
+ rg.ID = [index ?: fcid, lane].join(".")
rg.PU = [fcid, lane].join(".")
rg.PL = "ILLUMINA"
}
From a31c697bc1158660990191720621993a7c759555 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Wed, 18 Feb 2026 15:02:10 +0100
Subject: [PATCH 205/228] Update all modules to topic and drop versions channel
---
modules.json | 16 +-
modules/nf-core/biobambam/bamsormadup/main.nf | 48 ++-
.../nf-core/biobambam/bamsormadup/meta.yml | 53 +++-
.../biobambam/bamsormadup/tests/main.nf.test | 15 +-
.../bamsormadup/tests/main.nf.test.snap | 92 +++---
modules/nf-core/bwa/mem/main.nf | 15 +-
modules/nf-core/bwa/mem/meta.yml | 67 ++--
modules/nf-core/bwa/mem/tests/main.nf.test | 10 +-
.../nf-core/bwa/mem/tests/main.nf.test.snap | 207 ++++++++++---
modules/nf-core/dragmap/align/main.nf | 18 +-
modules/nf-core/dragmap/align/meta.yml | 85 +++++-
.../nf-core/dragmap/align/tests/main.nf.test | 16 +-
.../dragmap/align/tests/main.nf.test.snap | 242 ++++++++++-----
modules/nf-core/gnu/sort/tests/main.nf.test | 28 +-
modules/nf-core/md5sum/main.nf | 22 +-
modules/nf-core/md5sum/meta.yml | 32 +-
.../nf-core/md5sum/tests/main.nf.test.snap | 154 +++++++---
modules/nf-core/snapaligner/align/main.nf | 16 +-
modules/nf-core/snapaligner/align/meta.yml | 41 ++-
.../snapaligner/align/tests/main.nf.test.snap | 66 ++--
modules/nf-core/strobealign/main.nf | 18 +-
modules/nf-core/strobealign/meta.yml | 90 ++++--
.../nf-core/strobealign/tests/main.nf.test | 14 +-
.../strobealign/tests/main.nf.test.snap | 288 ++++++++++++++----
.../main.nf | 3 -
subworkflows/nf-core/fastq_align_dna/main.nf | 12 +-
.../fastq_align_dna/tests/main.nf.test | 2 -
.../fastq_align_dna/tests/main.nf.test.snap | 98 +++---
workflows/preprocessing.nf | 5 +-
29 files changed, 1172 insertions(+), 601 deletions(-)
diff --git a/modules.json b/modules.json
index b7e85768..8d39bf4b 100644
--- a/modules.json
+++ b/modules.json
@@ -12,7 +12,7 @@
},
"biobambam/bamsormadup": {
"branch": "master",
- "git_sha": "051e7c60dbdcc5d96ce7814c31426ce776f5319b",
+ "git_sha": "aef75083111cea684bafb6c27cdba8a8d0916638",
"installed_by": ["modules"],
"patch": "modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff"
},
@@ -24,7 +24,7 @@
},
"bwa/mem": {
"branch": "master",
- "git_sha": "966ba9887e2b04d89d64db06c01508873bde13b1",
+ "git_sha": "707241c72951f24fd89982c4c80c5983a4c437ef",
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/bwa/mem/bwa-mem.diff"
},
@@ -36,7 +36,7 @@
},
"dragmap/align": {
"branch": "master",
- "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46",
+ "git_sha": "9fd8df2d3e0cd7add065a5c59dd1e9841a907e13",
"installed_by": ["fastq_align_dna"],
"patch": "modules/nf-core/dragmap/align/dragmap-align.diff"
},
@@ -52,12 +52,12 @@
},
"gnu/sort": {
"branch": "master",
- "git_sha": "f35fac92470336be03b96bae7547d81d88a3331a",
+ "git_sha": "5e748ff2b0f990949081c9e49792622eb3fe9ee9",
"installed_by": ["modules"]
},
"md5sum": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "7df444999424fb148e251c4de5140296c9356f54",
"installed_by": ["modules"]
},
"mosdepth": {
@@ -132,7 +132,7 @@
},
"snapaligner/align": {
"branch": "master",
- "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726",
+ "git_sha": "cf0eb2bed12c39c5b714d44dd02039a0cefaedb1",
"installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/snapaligner/align/snapaligner-align.diff"
},
@@ -144,7 +144,7 @@
},
"strobealign": {
"branch": "master",
- "git_sha": "d5cc72b63c4e1565cb66e83f0577b04c0bb54d5c",
+ "git_sha": "698af1c52555faeba677dfafc6d0197a840ca81f",
"installed_by": ["fastq_align_dna", "modules"],
"patch": "modules/nf-core/strobealign/strobealign.diff"
}
@@ -154,7 +154,7 @@
"nf-core": {
"fastq_align_dna": {
"branch": "master",
- "git_sha": "5dd46a36fca68d6ad1a6b22ec47adc8c6863717d",
+ "git_sha": "cf0eb2bed12c39c5b714d44dd02039a0cefaedb1",
"installed_by": ["subworkflows"],
"patch": "subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff"
},
diff --git a/modules/nf-core/biobambam/bamsormadup/main.nf b/modules/nf-core/biobambam/bamsormadup/main.nf
index 032e718d..804a35c2 100644
--- a/modules/nf-core/biobambam/bamsormadup/main.nf
+++ b/modules/nf-core/biobambam/bamsormadup/main.nf
@@ -1,21 +1,21 @@
process BIOBAMBAM_BAMSORMADUP {
- tag "$meta.id"
+ tag "${meta.id}"
label "process_medium"
conda "${moduleDir}/environment.yml"
- container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ?
- 'https://depot.galaxyproject.org/singularity/biobambam:2.0.185--h85de650_1' :
- 'biocontainers/biobambam:2.0.185--h85de650_1'}"
+ container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container
+ ? 'https://depot.galaxyproject.org/singularity/biobambam:2.0.185--h85de650_1'
+ : 'biocontainers/biobambam:2.0.185--h85de650_1'}"
input:
tuple val(meta) , path(bams, stageAs: "?/*"), path(fasta), path(fai)
output:
- tuple val(meta), path("*.bam") ,optional:true, emit: bam
- tuple val(meta), path("*.bam.bai") ,optional:true, emit: bam_index
- tuple val(meta), path("*.cram") ,optional:true, emit: cram
- tuple val(meta), path("*.metrics.txt") ,emit: metrics
- path "versions.yml" ,emit: versions
+ tuple val(meta), path("*.bam"), optional: true, emit: bam
+ tuple val(meta), path("*.bam.bai"), optional: true, emit: bam_index
+ tuple val(meta), path("*.cram"), optional: true, emit: cram
+ tuple val(meta), path("*.metrics.txt"), emit: metrics
+ tuple val("${task.process}"), val('biobambam'), eval("bamsormadup --version |& sed '1!d; s/.*version //; s/.\$//'"), topic: versions, emit: versions_biobambam
when:
task.ext.when == null || task.ext.when
@@ -26,7 +26,9 @@ process BIOBAMBAM_BAMSORMADUP {
def prefix = task.ext.prefix ?: "${meta.id}"
def suffix = args.contains("outputformat=cram") ? "cram" : "bam"
def input_string = bams instanceof List ? bams.join(" I=") : bams
- if (args.contains("outputformat=cram") && fasta == null) error "Reference required for CRAM output."
+ if (args.contains("outputformat=cram") && fasta == null) {
+ error("Reference required for CRAM output.")
+ }
"""
bamcat \\
@@ -34,37 +36,25 @@ process BIOBAMBAM_BAMSORMADUP {
level=0 \\
| bamcollate2 \\
level=0 \\
- $args2 \\
+ ${args2} \\
| bamsormadup \\
- $args \\
+ ${args} \\
M=${prefix}.metrics.txt \\
- tmpfile=$prefix \\
- threads=$task.cpus \\
+ tmpfile=${prefix} \\
+ threads=${task.cpus} \\
> ${prefix}.${suffix}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bamcat: \$(echo \$(bamcat --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' )
- bamcollate2: \$(echo \$(bamcollate2 --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' )
- bamsormadup: \$(echo \$(bamsormadup --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' )
- END_VERSIONS
"""
stub:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
def suffix = args.contains("outputformat=cram") ? "cram" : "bam"
- if (args.contains("outputformat=cram") && fasta == null) error "Reference required for CRAM output."
+ if (args.contains("outputformat=cram") && fasta == null) {
+ error("Reference required for CRAM output.")
+ }
"""
touch ${prefix}.${suffix}
touch ${prefix}.metrics.txt
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bamcat: \$(echo \$(bamcat --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' )
- bamcollate2: \$(echo \$(bamcollate2 --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' )
- bamsormadup: \$(echo \$(bamsormadup --version 2>&1) | sed 's/^This is biobambam2 version //; s/..biobambam2 is .*\$//' )
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/biobambam/bamsormadup/meta.yml b/modules/nf-core/biobambam/bamsormadup/meta.yml
index a863c54a..fbfb0bbd 100644
--- a/modules/nf-core/biobambam/bamsormadup/meta.yml
+++ b/modules/nf-core/biobambam/bamsormadup/meta.yml
@@ -12,7 +12,8 @@ tools:
homepage: https://gitlab.com/german.tischler/biobambam2
documentation: https://gitlab.com/german.tischler/biobambam2/-/blob/master/README.md
doi: 10.1186/1751-0473-9-13
- licence: ["GPL v3"]
+ licence:
+ - "GPL v3"
identifier: ""
input:
- - meta:
@@ -23,7 +24,8 @@ input:
- bams:
type: file
description: List containing 1 or more bam files
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2572
- - meta2:
type: map
description: |
@@ -33,7 +35,14 @@ input:
type: file
description: Reference genome in FASTA format (optional)
pattern: "*.{fa,fasta,fna}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_1929
+ - fai:
+ type: file
+ description: Reference genome in FASTA index format (optional)
+ pattern: "*.{fai}"
+ ontologies:
+ - edam: http://edamontology.org/format_3673
output:
bam:
- - meta:
@@ -45,7 +54,8 @@ output:
type: file
description: BAM file with duplicate reads marked/removed
pattern: "*.bam"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2572
bam_index:
- - meta:
type: map
@@ -56,7 +66,8 @@ output:
type: file
description: BAM index file
pattern: "*.bai"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_3692
cram:
- - meta:
type: map
@@ -67,7 +78,8 @@ output:
type: file
description: CRAM file with duplicate reads marked/removed
pattern: "*.cram"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_3674
metrics:
- - meta:
type: map
@@ -78,14 +90,29 @@ output:
type: file
description: Duplicate metrics file generated by biobambam
pattern: "*.{metrics.txt}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_3675
+ versions_biobambam:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - biobambam:
+ type: string
+ description: The name of the tool
+ - bamsormadup --version |& sed '1!d; s/.*version //; s/.\$//':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - biobambam:
+ type: string
+ description: The name of the tool
+ - bamsormadup --version |& sed '1!d; s/.*version //; s/.\$//':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test
index 0c4c8498..0b65a21c 100644
--- a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test
+++ b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test
@@ -22,8 +22,7 @@ nextflow_process {
file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true)
]
]
- input[1] = [[:],[]]
-
+ input[1] = [[:],[],[]]
"""
}
}
@@ -36,7 +35,7 @@ nextflow_process {
process.out.bam_index,
process.out.cram,
file(process.out.metrics[0][1]).readLines()[3..5],
- process.out.versions.collect{ path(it).yaml }
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()}
)
}
@@ -53,8 +52,7 @@ nextflow_process {
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
]
]
- input[1] = [[:],[]]
-
+ input[1] = [[:],[],[]]
"""
}
}
@@ -67,7 +65,7 @@ nextflow_process {
process.out.bam_index,
process.out.cram,
file(process.out.metrics[0][1]).readLines()[3..5],
- process.out.versions.collect{ path(it).yaml }
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match()}
)
}
@@ -86,8 +84,7 @@ nextflow_process {
file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.bam', checkIfExists: true)
]
]
- input[1] = [[:],[]]
-
+ input[1] = [[:],[],[]]
"""
}
}
@@ -97,7 +94,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
process.out,
- process.out.versions.collect{ path(it).yaml }
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
diff --git a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap
index b820e405..a56a7949 100644
--- a/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap
+++ b/modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap
@@ -13,21 +13,21 @@
"lib1\t3\t97\t3\t0\t0\t0\t0\t-1",
""
],
- [
- {
- "BIOBAMBAM_BAMSORMADUP": {
- "bamcat": "2.0.185",
- "bamcollate2": "2.0.185",
- "bamsormadup": "2.0.185"
- }
- }
- ]
+ {
+ "versions_biobambam": [
+ [
+ "BIOBAMBAM_BAMSORMADUP",
+ "biobambam",
+ "2.0.185"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T12:29:21.145687",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
- },
- "timestamp": "2026-02-06T12:52:41.351378528"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test-biobambam-bamsormadup-multi-input": {
"content": [
@@ -43,21 +43,21 @@
"lib1\t3\t97\t3\t0\t0\t0\t0\t-1",
"testN\t0\t2820\t2\t0\t828\t0\t0.293617\t3807"
],
- [
- {
- "BIOBAMBAM_BAMSORMADUP": {
- "bamcat": "2.0.185",
- "bamcollate2": "2.0.185",
- "bamsormadup": "2.0.185"
- }
- }
- ]
+ {
+ "versions_biobambam": [
+ [
+ "BIOBAMBAM_BAMSORMADUP",
+ "biobambam",
+ "2.0.185"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T12:29:10.9703",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
- },
- "timestamp": "2026-02-06T12:52:29.639539709"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test-biobambam-bamsormadup-single-input-stub": {
"content": [
@@ -87,7 +87,11 @@
]
],
"4": [
- "versions.yml:md5,a3e9cdb2ef49dc4722663257b23c5cb6"
+ [
+ "BIOBAMBAM_BAMSORMADUP",
+ "biobambam",
+ "2.0.185"
+ ]
],
"bam": [
[
@@ -113,24 +117,28 @@
"test.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,a3e9cdb2ef49dc4722663257b23c5cb6"
+ "versions_biobambam": [
+ [
+ "BIOBAMBAM_BAMSORMADUP",
+ "biobambam",
+ "2.0.185"
+ ]
]
},
- [
- {
- "BIOBAMBAM_BAMSORMADUP": {
- "bamcat": "2.0.185",
- "bamcollate2": "2.0.185",
- "bamsormadup": "2.0.185"
- }
- }
- ]
+ {
+ "versions_biobambam": [
+ [
+ "BIOBAMBAM_BAMSORMADUP",
+ "biobambam",
+ "2.0.185"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T12:29:25.8377",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
- },
- "timestamp": "2026-02-06T13:56:01.80534017"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/modules/nf-core/bwa/mem/main.nf b/modules/nf-core/bwa/mem/main.nf
index a646e9e7..eed1d4c8 100644
--- a/modules/nf-core/bwa/mem/main.nf
+++ b/modules/nf-core/bwa/mem/main.nf
@@ -16,7 +16,8 @@ process BWA_MEM {
tuple val(meta), path("*.cram") , emit: cram, optional: true
tuple val(meta), path("*.csi") , emit: csi, optional: true
tuple val(meta), path("*.crai") , emit: crai, optional: true
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('bwa'), eval('bwa 2>&1 | sed -n "s/^Version: //p"'), topic: versions, emit: versions_bwa
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools
when:
task.ext.when == null || task.ext.when
@@ -42,12 +43,6 @@ process BWA_MEM {
\$INDEX \\
$reads \\
| samtools $samtools_command $args2 ${reference} --threads $task.cpus -o ${prefix}.${extension} -
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//')
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
stub:
@@ -62,11 +57,5 @@ process BWA_MEM {
touch ${prefix}.${extension}
touch ${prefix}.csi
touch ${prefix}.crai
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- bwa: \$(echo \$(bwa 2>&1) | sed 's/^.*Version: //; s/Contact:.*\$//')
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/bwa/mem/meta.yml b/modules/nf-core/bwa/mem/meta.yml
index e1265ab7..450a3fe9 100644
--- a/modules/nf-core/bwa/mem/meta.yml
+++ b/modules/nf-core/bwa/mem/meta.yml
@@ -16,7 +16,8 @@ tools:
homepage: http://bio-bwa.sourceforge.net/
documentation: https://bio-bwa.sourceforge.net/bwa.shtml
arxiv: arXiv:1303.3997
- licence: ["GPL-3.0-or-later"]
+ licence:
+ - "GPL-3.0-or-later"
identifier: "biotools:bwa"
input:
- - meta:
@@ -30,8 +31,8 @@ input:
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
ontologies:
- - edam: "http://edamontology.org/data_2044" # Sequence
- - edam: "http://edamontology.org/format_1930" # FASTQ
+ - edam: "http://edamontology.org/data_2044"
+ - edam: "http://edamontology.org/format_1930"
- - meta2:
type: map
description: |
@@ -42,7 +43,7 @@ input:
description: BWA genome index files
pattern: "Directory containing BWA index *.{amb,ann,bwt,pac,sa}"
ontologies:
- - edam: "http://edamontology.org/data_3210" # Genome index
+ - edam: "http://edamontology.org/data_3210"
- - meta3:
type: map
description: |
@@ -53,8 +54,8 @@ input:
description: Reference genome in FASTA format
pattern: "*.{fasta,fa}"
ontologies:
- - edam: "http://edamontology.org/data_2044" # Sequence
- - edam: "http://edamontology.org/format_1929" # FASTA
+ - edam: "http://edamontology.org/data_2044"
+ - edam: "http://edamontology.org/format_1929"
- sort_bam:
type: boolean
description: use samtools sort (true) or samtools view (false)
@@ -69,18 +70,17 @@ output:
description: Output BAM file containing read alignments
pattern: "*.{bam}"
ontologies:
- - edam: "http://edamontology.org/format_2572" # BAM
+ - edam: "http://edamontology.org/format_2572"
cram:
- - meta:
- type: file
- description: Output BAM file containing read alignments
- ontologies: []
+ type: map
+ description: Groovy Map containing sample information
- "*.cram":
type: file
description: Output CRAM file containing read alignments
pattern: "*.{cram}"
ontologies:
- - edam: "http://edamontology.org/format_3462" # CRAM
+ - edam: "http://edamontology.org/format_3462"
csi:
- - meta:
type: map
@@ -99,13 +99,46 @@ output:
description: Optional index file for CRAM file
pattern: "*.{crai}"
ontologies: []
+ versions_bwa:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bwa:
+ type: string
+ description: The name of the tool
+ - 'bwa 2>&1 | sed -n "s/^Version: //p"':
+ 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:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - bwa:
+ type: string
+ description: The name of the tool
+ - 'bwa 2>&1 | sed -n "s/^Version: //p"':
+ 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:
- "@drpatelh"
- "@jeremy1805"
diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test b/modules/nf-core/bwa/mem/tests/main.nf.test
index d7b69b9e..6486ab00 100644
--- a/modules/nf-core/bwa/mem/tests/main.nf.test
+++ b/modules/nf-core/bwa/mem/tests/main.nf.test
@@ -48,7 +48,7 @@ nextflow_process {
process.out.cram,
process.out.csi,
process.out.crai,
- process.out.versions,
+ process.out.findAll { key, val -> key.startsWith("versions") },
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -82,7 +82,7 @@ nextflow_process {
process.out.cram,
process.out.csi,
process.out.crai,
- process.out.versions,
+ process.out.findAll { key, val -> key.startsWith("versions") },
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -117,7 +117,7 @@ nextflow_process {
process.out.cram,
process.out.csi,
process.out.crai,
- process.out.versions,
+ process.out.findAll { key, val -> key.startsWith("versions") },
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -152,7 +152,7 @@ nextflow_process {
process.out.cram,
process.out.csi,
process.out.crai,
- process.out.versions,
+ process.out.findAll { key, val -> key.startsWith("versions") },
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
@@ -187,7 +187,7 @@ nextflow_process {
process.out.cram,
process.out.csi,
process.out.crai,
- process.out.versions,
+ process.out.findAll { key, val -> key.startsWith("versions") },
bam(process.out.bam[0][1]).getReadsMD5()
).match()
}
diff --git a/modules/nf-core/bwa/mem/tests/main.nf.test.snap b/modules/nf-core/bwa/mem/tests/main.nf.test.snap
index 70b7b89b..8aca4b23 100644
--- a/modules/nf-core/bwa/mem/tests/main.nf.test.snap
+++ b/modules/nf-core/bwa/mem/tests/main.nf.test.snap
@@ -10,16 +10,29 @@
[
],
- [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
- ],
+ {
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ },
"798439cbd7fd81cbcc5078022dc5479d"
],
+ "timestamp": "2026-02-18T12:42:52.901827",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2026-01-26T15:16:52.718077761"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"Single-End Sort": {
"content": [
@@ -32,16 +45,29 @@
[
],
- [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
- ],
+ {
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ },
"94fcf617f5b994584c4e8d4044e16b4f"
],
+ "timestamp": "2026-02-18T12:43:01.149915",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2026-01-26T15:17:00.554958251"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"Paired-End": {
"content": [
@@ -54,16 +80,29 @@
[
],
- [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
- ],
+ {
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ },
"57aeef88ed701a8ebc8e2f0a381b2a6"
],
+ "timestamp": "2026-02-18T12:43:09.528042",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2026-01-26T15:17:08.162122031"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"Paired-End Sort": {
"content": [
@@ -76,16 +115,29 @@
[
],
- [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
- ],
+ {
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ },
"af8628d9df18b2d3d4f6fd47ef2bb872"
],
+ "timestamp": "2026-02-18T12:43:17.876121",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2026-01-26T15:17:15.713464923"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"Single-end - stub": {
"content": [
@@ -121,7 +173,18 @@
]
],
"4": [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "5": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
],
"bam": [
[
@@ -153,16 +216,27 @@
"test.csi:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
+ "timestamp": "2026-02-18T12:43:33.853248",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T11:05:51.638917351"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"Paired-End - no fasta": {
"content": [
@@ -175,16 +249,29 @@
[
],
- [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
- ],
+ {
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
+ ]
+ },
"57aeef88ed701a8ebc8e2f0a381b2a6"
],
+ "timestamp": "2026-02-18T12:43:26.121474",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.2"
- },
- "timestamp": "2026-01-26T15:17:23.395002931"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"Paired-end - stub": {
"content": [
@@ -220,7 +307,18 @@
]
],
"4": [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "5": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
],
"bam": [
[
@@ -252,15 +350,26 @@
"test.csi:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,f882069f942ae2a95e2c91f82e4445c6"
+ "versions_bwa": [
+ [
+ "BWA_MEM",
+ "bwa",
+ "0.7.19-r1273"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "BWA_MEM",
+ "samtools",
+ "1.22.1"
+ ]
]
}
],
+ "timestamp": "2026-02-18T12:43:42.119907",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T11:05:59.642014144"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/modules/nf-core/dragmap/align/main.nf b/modules/nf-core/dragmap/align/main.nf
index 2529cbca..a0abf087 100644
--- a/modules/nf-core/dragmap/align/main.nf
+++ b/modules/nf-core/dragmap/align/main.nf
@@ -19,7 +19,9 @@ process DRAGMAP_ALIGN {
tuple val(meta), path("*.crai"), emit: crai, optional: true
tuple val(meta), path("*.csi"), emit: csi, optional: true
tuple val(meta), path('*.log'), emit: log
- path "versions.yml", emit: versions
+ tuple val("${task.process}"), val('dragmap'), eval("dragen-os --version 2>&1"), emit: versions_dragmap, topic: versions
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions
+ tuple val("${task.process}"), val('pigz'), eval("pigz --version 2>&1 | sed 's/pigz //'"), emit: versions_pigz, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -46,13 +48,6 @@ process DRAGMAP_ALIGN {
${reads_command} \\
2>| >(tee ${prefix}.dragmap.log >&2) \\
| samtools ${samtools_command} ${args2} --threads ${task.cpus} ${reference} -o ${prefix}.${extension} -
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- dragmap: \$(echo \$(dragen-os --version 2>&1))
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
"""
stub:
@@ -77,12 +72,5 @@ process DRAGMAP_ALIGN {
touch ${prefix}.${extension}
${create_index}
touch ${prefix}.log
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- dragmap: \$(echo \$(dragen-os --version 2>&1))
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/dragmap/align/meta.yml b/modules/nf-core/dragmap/align/meta.yml
index ba3ab484..bdb7f00a 100644
--- a/modules/nf-core/dragmap/align/meta.yml
+++ b/modules/nf-core/dragmap/align/meta.yml
@@ -12,7 +12,8 @@ tools:
homepage: https://github.com/Illumina/dragmap
documentation: https://github.com/Illumina/dragmap
tool_dev_url: https://github.com/Illumina/dragmap#basic-command-line-usage
- licence: ["GPL v3"]
+ licence:
+ - "GPL v3"
identifier: ""
input:
- - meta:
@@ -25,7 +26,8 @@ input:
description: |
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_1930
- - meta2:
type: map
description: |
@@ -45,7 +47,8 @@ input:
type: file
description: Genome fasta reference files
pattern: "*.{fa,fasta,fna}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_1929
- sort_bam:
type: boolean
description: Sort the BAM file
@@ -60,7 +63,8 @@ output:
type: file
description: Output SAM file containing read alignments
pattern: "*.{sam}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2571
bam:
- - meta:
type: map
@@ -71,7 +75,8 @@ output:
type: file
description: Output BAM file containing read alignments
pattern: "*.{bam}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2572
cram:
- - meta:
type: map
@@ -82,7 +87,8 @@ output:
type: file
description: Output CRAM file containing read alignments
pattern: "*.{cram}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2573
crai:
- - meta:
type: map
@@ -115,14 +121,67 @@ output:
type: file
description: Log file
pattern: "*.{log}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_3888
+ versions_dragmap:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - dragmap:
+ type: string
+ description: The name of the tool
+ - dragen-os --version 2>&1:
+ 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
+ versions_pigz:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - pigz --version 2>&1 | sed 's/pigz //':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - dragmap:
+ type: string
+ description: The name of the tool
+ - dragen-os --version 2>&1:
+ 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
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - pigz --version 2>&1 | sed 's/pigz //':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@edmundmiller"
maintainers:
diff --git a/modules/nf-core/dragmap/align/tests/main.nf.test b/modules/nf-core/dragmap/align/tests/main.nf.test
index 5abe76f6..5e8b5baa 100644
--- a/modules/nf-core/dragmap/align/tests/main.nf.test
+++ b/modules/nf-core/dragmap/align/tests/main.nf.test
@@ -45,8 +45,7 @@ nextflow_process {
{ assert snapshot(
file(process.out.bam[0][1]).name,
file(process.out.log[0][1]).readLines().findAll { it.startsWith("decompHash") },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ process.out.findAll { key, val -> key.startsWith("versions") },
).match() }
)
}
@@ -89,8 +88,7 @@ nextflow_process {
{ assert snapshot(
file(process.out.bam[0][1]).name,
file(process.out.log[0][1]).readLines().findAll { it.startsWith("decompHash") },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ process.out.findAll { key, val -> key.startsWith("versions") },
).match() }
)
}
@@ -136,8 +134,7 @@ nextflow_process {
{ assert snapshot(
file(process.out.bam[0][1]).name,
file(process.out.log[0][1]).readLines().findAll { it.startsWith("decompHash") },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ process.out.findAll { key, val -> key.startsWith("versions") },
).match() }
)
}
@@ -183,8 +180,7 @@ nextflow_process {
{ assert snapshot(
file(process.out.bam[0][1]).name,
file(process.out.log[0][1]).readLines().findAll { it.startsWith("decompHash") },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ process.out.findAll { key, val -> key.startsWith("versions") },
).match() }
)
}
@@ -230,8 +226,7 @@ nextflow_process {
{ assert snapshot(
file(process.out.bam[0][1]).name,
file(process.out.log[0][1]).readLines().findAll { it.startsWith("decompHash") },
- process.out.versions,
- path(process.out.versions[0]).yaml
+ process.out.findAll { key, val -> key.startsWith("versions") },
).match() }
)
}
@@ -277,7 +272,6 @@ nextflow_process {
assertAll (
{ assert snapshot(
process.out,
- path(process.out.versions[0]).yaml
).match() }
)
}
diff --git a/modules/nf-core/dragmap/align/tests/main.nf.test.snap b/modules/nf-core/dragmap/align/tests/main.nf.test.snap
index 9a63fde0..4b355a0a 100644
--- a/modules/nf-core/dragmap/align/tests/main.nf.test.snap
+++ b/modules/nf-core/dragmap/align/tests/main.nf.test.snap
@@ -10,22 +10,35 @@
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
],
- [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
- ],
{
- "DRAGMAP_ALIGN": {
- "dragmap": "1.2.1",
- "samtools": "1.19.2",
- "pigz": "2.3.4"
- }
+ "versions_dragmap": [
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
+ ]
}
],
+ "timestamp": "2026-02-18T13:37:09.601416",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
- },
- "timestamp": "2025-04-10T11:33:50.428894432"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"homo_sapiens - [fastq1, fastq2], hashtable, fasta, true": {
"content": [
@@ -38,22 +51,35 @@
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
],
- [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
- ],
{
- "DRAGMAP_ALIGN": {
- "dragmap": "1.2.1",
- "samtools": "1.19.2",
- "pigz": "2.3.4"
- }
+ "versions_dragmap": [
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
+ ]
}
],
+ "timestamp": "2026-02-18T13:37:59.385197",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
- },
- "timestamp": "2025-04-10T11:34:27.492548556"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"sarscov2 - fastq, hashtable, fasta, true": {
"content": [
@@ -66,22 +92,35 @@
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
],
- [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
- ],
{
- "DRAGMAP_ALIGN": {
- "dragmap": "1.2.1",
- "samtools": "1.19.2",
- "pigz": "2.3.4"
- }
+ "versions_dragmap": [
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
+ ]
}
],
+ "timestamp": "2026-02-18T13:37:02.623362",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
- },
- "timestamp": "2025-04-10T11:33:39.843877739"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"sarscov2 - [fastq1, fastq2], hashtable, fasta, true": {
"content": [
@@ -94,22 +133,35 @@
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
],
- [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
- ],
{
- "DRAGMAP_ALIGN": {
- "dragmap": "1.2.1",
- "samtools": "1.19.2",
- "pigz": "2.3.4"
- }
+ "versions_dragmap": [
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
+ ]
}
],
+ "timestamp": "2026-02-18T13:37:16.491006",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
- },
- "timestamp": "2025-04-10T11:34:00.702498161"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"sarscov2 - [fastq1, fastq2], hashtable, fasta, true - stub": {
"content": [
@@ -151,7 +203,25 @@
]
],
"6": [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "7": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
+ ],
+ "8": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
],
"bam": [
[
@@ -189,23 +259,34 @@
"sam": [
],
- "versions": [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
+ "versions_dragmap": [
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
]
- },
- {
- "DRAGMAP_ALIGN": {
- "dragmap": "1.2.1",
- "samtools": "1.19.2",
- "pigz": "2.3.4"
- }
}
],
+ "timestamp": "2026-02-18T13:38:06.245799",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
- },
- "timestamp": "2025-04-10T11:13:17.187912755"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"sarscov2 - fastq, hashtable, fasta, false": {
"content": [
@@ -218,21 +299,34 @@
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
],
- [
- "versions.yml:md5,bec50713b6dac1cc16fe68b731848394"
- ],
{
- "DRAGMAP_ALIGN": {
- "dragmap": "1.2.1",
- "samtools": "1.19.2",
- "pigz": "2.3.4"
- }
+ "versions_dragmap": [
+ [
+ "DRAGMAP_ALIGN",
+ "dragmap",
+ "1.2.1"
+ ]
+ ],
+ "versions_pigz": [
+ [
+ "DRAGMAP_ALIGN",
+ "pigz",
+ "2.3.4"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "DRAGMAP_ALIGN",
+ "samtools",
+ "1.19.2"
+ ]
+ ]
}
],
+ "timestamp": "2026-02-18T13:36:55.869439",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.5"
- },
- "timestamp": "2025-04-10T11:33:28.056988229"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/modules/nf-core/gnu/sort/tests/main.nf.test b/modules/nf-core/gnu/sort/tests/main.nf.test
index dbe473d2..9aef3daf 100644
--- a/modules/nf-core/gnu/sort/tests/main.nf.test
+++ b/modules/nf-core/gnu/sort/tests/main.nf.test
@@ -16,10 +16,9 @@ nextflow_process {
process {
"""
input[0] = [
- [id:'genome_test'],
- file(params.test_data['generic']['unsorted_data']['unsorted_text']['genome_file'],
- checkIfExists: true)
- ]
+ [id:'genome_test'],
+ file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.genome', checkIfExists: true)
+ ]
"""
}
}
@@ -39,10 +38,9 @@ nextflow_process {
process {
"""
input[0] = [
- [id:'test'],
- file(params.test_data['generic']['unsorted_data']['unsorted_text']['intervals'],
- checkIfExists: true)
- ]
+ [id:'test'],
+ file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.bed', checkIfExists: true)
+ ]
"""
}
}
@@ -63,10 +61,9 @@ nextflow_process {
process {
"""
input[0] = [
- [id:'test'],
- file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'],
- checkIfExists: true)
- ]
+ [id:'test'],
+ file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.csv', checkIfExists: true)
+ ]
"""
}
}
@@ -88,10 +85,9 @@ nextflow_process {
process {
"""
input[0] = [
- [id:'test'],
- file(params.test_data['generic']['unsorted_data']['unsorted_text']['numbers_csv'],
- checkIfExists: true)
- ]
+ [id:'test'],
+ file(params.modules_testdata_base_path + 'generic/unsorted_data/unsorted_text/test.csv', checkIfExists: true)
+ ]
"""
}
}
diff --git a/modules/nf-core/md5sum/main.nf b/modules/nf-core/md5sum/main.nf
index ea8cffed..3412281e 100644
--- a/modules/nf-core/md5sum/main.nf
+++ b/modules/nf-core/md5sum/main.nf
@@ -13,7 +13,7 @@ process MD5SUM {
output:
tuple val(meta), path("*.md5"), emit: checksum
- path "versions.yml", emit: versions
+ tuple val("${task.process}"), val('md5sum'), eval("md5sum --version | sed '1!d; s/.* //'"), topic: versions, emit: versions_md5sum
when:
task.ext.when == null || task.ext.when
@@ -27,11 +27,6 @@ process MD5SUM {
find -L * -maxdepth 0 -type f \\
! -name '*.md5' \\
-exec sh -c 'md5sum ${args} "\$1" > "\$1.md5"' _ "{}" \\;
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- md5sum: \$( md5sum --version | sed '1!d; s/.* //' )
- END_VERSIONS
"""
}
else {
@@ -40,11 +35,6 @@ process MD5SUM {
! -name '*.md5' \\
-exec md5sum ${args} "{}" + \\
> ${prefix}.md5
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- md5sum: \$( md5sum --version | sed '1!d; s/.* //' )
- END_VERSIONS
"""
}
@@ -55,21 +45,11 @@ process MD5SUM {
find -L * -type f \\
! -name '*.md5' \\
-exec sh -c 'touch "\$1.md5"' _ "{}" \\;
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- md5sum: \$( md5sum --version | sed '1!d; s/.* //' )
- END_VERSIONS
"""
}
else {
"""
touch ${prefix}.md5
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- md5sum: \$( md5sum --version | sed '1!d; s/.* //' )
- END_VERSIONS
"""
}
}
diff --git a/modules/nf-core/md5sum/meta.yml b/modules/nf-core/md5sum/meta.yml
index c1f7e36d..71066a84 100644
--- a/modules/nf-core/md5sum/meta.yml
+++ b/modules/nf-core/md5sum/meta.yml
@@ -9,7 +9,8 @@ tools:
description: Create MD5 (128-bit) checksums for each file
homepage: "https://www.gnu.org"
documentation: "https://man7.org/linux/man-pages/man1/md5sum.1.html"
- licence: ["GPL-3.0-or-later"]
+ licence:
+ - "GPL-3.0-or-later"
identifier: ""
input:
- - meta:
@@ -19,7 +20,8 @@ input:
e.g. [ id:'test', single_end:false ]
- files:
type: file
- description: Any number of files. One md5sum file will be generated for each.
+ description: Any number of files. One md5sum file will be generated for
+ each.
pattern: "*.*"
ontologies: []
- as_separate_files:
@@ -39,13 +41,27 @@ output:
description: File containing checksum
pattern: "*.md5"
ontologies: []
+ versions_md5sum:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - md5sum:
+ type: string
+ description: The name of the tool
+ - md5sum --version | sed '1!d; s/.* //':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - md5sum:
+ type: string
+ description: The name of the tool
+ - md5sum --version | sed '1!d; s/.* //':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/md5sum/tests/main.nf.test.snap b/modules/nf-core/md5sum/tests/main.nf.test.snap
index 20b59b0b..bf78c29b 100644
--- a/modules/nf-core/md5sum/tests/main.nf.test.snap
+++ b/modules/nf-core/md5sum/tests/main.nf.test.snap
@@ -14,7 +14,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -27,16 +31,20 @@
]
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:31:17.339668",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:49:35.159607272"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"md5sum on paired fastq, separate": {
"content": [
@@ -53,7 +61,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -66,16 +78,20 @@
]
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:31:11.522274",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:49:27.200164144"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"md5sum on hello.txt - stub": {
"content": [
@@ -89,7 +105,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -99,16 +119,20 @@
"hello.txt.md5:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:30:52.301881",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:49:01.643624698"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"md5sum on hello.txt": {
"content": [
@@ -122,7 +146,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -132,16 +160,20 @@
"hello.txt.md5:md5,5c18e1db5460fb32fed66966483165fd"
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:30:41.089186",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:48:47.201714961"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"md5sum on paired fastq, combined": {
"content": [
@@ -155,7 +187,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -165,16 +201,20 @@
"test.md5:md5,dfb98e45cbb77a9a63ae7029aee38bd1"
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:30:58.611754",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:49:10.207550973"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"md5sum on paired fastq, combined - stub": {
"content": [
@@ -188,7 +228,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -198,16 +242,20 @@
"test.md5:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:31:06.064053",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:49:18.36682418"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"md5sum on hello.txt (BSD-style)": {
"content": [
@@ -221,7 +269,11 @@
]
],
"1": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
],
"checksum": [
[
@@ -231,15 +283,19 @@
"hello.txt.md5:md5,152a03f5dc7aa8db6612f63154ecbca2"
]
],
- "versions": [
- "versions.yml:md5,792d39a2c683575fc644e1bb9087fa5f"
+ "versions_md5sum": [
+ [
+ "MD5SUM",
+ "md5sum",
+ "9.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:30:46.389675",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "24.10.2"
- },
- "timestamp": "2024-12-13T11:48:54.672060206"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/modules/nf-core/snapaligner/align/main.nf b/modules/nf-core/snapaligner/align/main.nf
index eacf4644..177d5b82 100644
--- a/modules/nf-core/snapaligner/align/main.nf
+++ b/modules/nf-core/snapaligner/align/main.nf
@@ -4,8 +4,8 @@ process SNAPALIGNER_ALIGN {
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/21/21f75cd3d97dfe58e62bea51751b04d33a03a16eae3e9947335d569e22962143/data':
- 'community.wave.seqera.io/library/snap-aligner:2.0.5--23601d3a3a2ae452' }"
+ 'https://depot.galaxyproject.org/singularity/snap-aligner:2.0.5--h077b44d_2':
+ 'biocontainers/snap-aligner:2.0.5--h077b44d_2' }"
input:
tuple val(meta) , path(reads, stageAs: "?/*"), path(index)
@@ -13,7 +13,7 @@ process SNAPALIGNER_ALIGN {
output:
tuple val(meta), path("*.bam"), emit: bam
tuple val(meta), path("*.bai"), optional: true, emit: bai
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('snap-aligner'), eval("snap-aligner 2>&1 | sed 's/^.*version //;s/.\$//;q'"), topic: versions, emit: versions_snapaligner
when:
task.ext.when == null || task.ext.when
@@ -33,21 +33,11 @@ process SNAPALIGNER_ALIGN {
-o ${prefix}.bam \\
-t ${task.cpus} \\
$args
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- snapaligner: \$(snap-aligner 2>&1| head -n 1 | sed 's/^.*version //;s/.\$//')
- END_VERSIONS
"""
stub:
"""
touch test.bam
touch test.bam.bai
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- snapaligner: \$(snap-aligner 2>&1| head -n 1 | sed 's/^.*version //;s/.\$//')
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/snapaligner/align/meta.yml b/modules/nf-core/snapaligner/align/meta.yml
index 66f2fca4..c7aab28d 100644
--- a/modules/nf-core/snapaligner/align/meta.yml
+++ b/modules/nf-core/snapaligner/align/meta.yml
@@ -14,7 +14,8 @@ tools:
documentation: "https://1drv.ms/b/s!AhuEg_0yZD86hcpblUt-muHKYsG8fA?e=R8ogug"
tool_dev_url: "https://github.com/amplab/snap"
doi: "10.1101/2021.11.23.469039"
- licence: ["Apache v2"]
+ licence:
+ - "Apache v2"
identifier: ""
input:
- - meta:
@@ -24,11 +25,11 @@ input:
e.g. [ id:'test', single_end:false ]
- reads:
type: file
- description: List of input fastq files of size 2 for paired fastq or 1 for bam
- or single fastq
+ description: List of input fastq files of size 2 for paired fastq or 1 for
+ bam or single fastq
pattern: "*.{fastq.gz,fq.gz,fastq,fq,bam}"
ontologies:
- - edam: http://edamontology.org/format_1930 # FASTQ
+ - edam: http://edamontology.org/format_1930
- - meta2:
type: map
description: |
@@ -50,7 +51,8 @@ output:
type: file
description: Aligned BAM file
pattern: "*.{bam}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2572
bai:
- - meta:
type: map
@@ -61,14 +63,29 @@ output:
type: file
description: Optional aligned BAM file index
pattern: "*.{bai}"
- ontologies: []
+ ontologies:
+ - edam: http://edamontology.org/format_2572
+ versions_snapaligner:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - snap-aligner:
+ type: string
+ description: The name of the tool
+ - snap-aligner 2>&1 | sed 's/^.*version //;s/.\$//;q':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - snap-aligner:
+ type: string
+ description: The name of the tool
+ - snap-aligner 2>&1 | sed 's/^.*version //;s/.\$//;q':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/snapaligner/align/tests/main.nf.test.snap b/modules/nf-core/snapaligner/align/tests/main.nf.test.snap
index f660cd39..f6107c9c 100644
--- a/modules/nf-core/snapaligner/align/tests/main.nf.test.snap
+++ b/modules/nf-core/snapaligner/align/tests/main.nf.test.snap
@@ -21,7 +21,11 @@
]
],
"2": [
- "versions.yml:md5,dd98393cd432d8472209fcb8f6be362f"
+ [
+ "SNAPALIGNER_ALIGN",
+ "snap-aligner",
+ "2.0.5"
+ ]
],
"bai": [
[
@@ -41,16 +45,20 @@
"test.bam:md5,fc98a93036a3c5f7c674d470f7c5515a"
]
],
- "versions": [
- "versions.yml:md5,dd98393cd432d8472209fcb8f6be362f"
+ "versions_snapaligner": [
+ [
+ "SNAPALIGNER_ALIGN",
+ "snap-aligner",
+ "2.0.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T13:58:48.808573",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T12:01:44.085165306"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_snapaligner_stub": {
"content": [
@@ -74,7 +82,11 @@
]
],
"2": [
- "versions.yml:md5,dd98393cd432d8472209fcb8f6be362f"
+ [
+ "SNAPALIGNER_ALIGN",
+ "snap-aligner",
+ "2.0.5"
+ ]
],
"bai": [
[
@@ -94,16 +106,20 @@
"test.bam:md5,d41d8cd98f00b204e9800998ecf8427e"
]
],
- "versions": [
- "versions.yml:md5,dd98393cd432d8472209fcb8f6be362f"
+ "versions_snapaligner": [
+ [
+ "SNAPALIGNER_ALIGN",
+ "snap-aligner",
+ "2.0.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T13:59:04.153824",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T12:01:58.930050472"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_snapaligner_paired": {
"content": [
@@ -127,7 +143,11 @@
]
],
"2": [
- "versions.yml:md5,dd98393cd432d8472209fcb8f6be362f"
+ [
+ "SNAPALIGNER_ALIGN",
+ "snap-aligner",
+ "2.0.5"
+ ]
],
"bai": [
[
@@ -147,15 +167,19 @@
"test.bam:md5,d4e6df5e063034da268fa4b97db369d3"
]
],
- "versions": [
- "versions.yml:md5,dd98393cd432d8472209fcb8f6be362f"
+ "versions_snapaligner": [
+ [
+ "SNAPALIGNER_ALIGN",
+ "snap-aligner",
+ "2.0.5"
+ ]
]
}
],
+ "timestamp": "2026-02-18T13:58:57.101052",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T12:01:51.606664577"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/modules/nf-core/strobealign/main.nf b/modules/nf-core/strobealign/main.nf
index 26ab2489..aae11f08 100644
--- a/modules/nf-core/strobealign/main.nf
+++ b/modules/nf-core/strobealign/main.nf
@@ -19,7 +19,9 @@ process STROBEALIGN {
tuple val(meta), path("*.paf.gz") , emit: paf , optional: true
tuple val(meta), path("*.tsv.gz") , emit: tsv , optional: true
tuple val(meta), path("*.sti") , emit: sti , optional: true
- path "versions.yml" , emit: versions
+ tuple val("${task.process}"), val('strobealign'), eval("strobealign --version"), topic: versions, emit: versions_strobealign
+ tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions
+ tuple val("${task.process}"), val('pigz'), eval("pigz --version 2>&1 | sed 's/pigz //'"), emit: versions_pigz, topic: versions
when:
task.ext.when == null || task.ext.when
@@ -65,13 +67,6 @@ process STROBEALIGN {
${fasta} \\
${reads} \\
| ${output_cmd}
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- strobealign: \$(echo \$(strobealign --version))
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
"""
stub:
@@ -97,12 +92,5 @@ process STROBEALIGN {
echo "" | pigz > ${prefix}.paf.gz
echo "" | pigz > ${prefix}.tsv.gz
touch ${prefix}.sti
-
- cat <<-END_VERSIONS > versions.yml
- "${task.process}":
- strobealign: \$(echo \$(strobealign --version))
- samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
- pigz: \$( pigz --version 2>&1 | sed 's/pigz //g' )
- END_VERSIONS
"""
}
diff --git a/modules/nf-core/strobealign/meta.yml b/modules/nf-core/strobealign/meta.yml
index e4ede404..f4b85b24 100644
--- a/modules/nf-core/strobealign/meta.yml
+++ b/modules/nf-core/strobealign/meta.yml
@@ -1,4 +1,3 @@
-# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json
name: "strobealign"
description: "Align short reads using dynamic seed size with strobemers"
keywords:
@@ -16,9 +15,9 @@ tools:
documentation: "https://github.com/ksahlin/strobealign?tab=readme-ov-file#usage"
tool_dev_url: "https://github.com/ksahlin/strobealign"
doi: "10.1186/s13059-022-02831-7"
- licence: ["MIT"]
+ licence:
+ - "MIT"
identifier: biotools:strobealign
-
input:
- - meta:
type: map
@@ -31,8 +30,8 @@ input:
List of input FastQ files of size 1 and 2 for single-end and paired-end data,
respectively.
ontologies:
- - edam: "http://edamontology.org/data_2044" # Sequence
- - edam: "http://edamontology.org/format_1930" # FASTQ
+ - edam: "http://edamontology.org/data_2044"
+ - edam: "http://edamontology.org/format_1930"
- - meta2:
type: map
description: |
@@ -43,8 +42,8 @@ input:
description: Reference genome in FASTA format
pattern: "*.{fasta,fa}"
ontologies:
- - edam: "http://edamontology.org/data_2044" # Sequence
- - edam: "http://edamontology.org/format_1929" # FASTA
+ - edam: "http://edamontology.org/data_2044"
+ - edam: "http://edamontology.org/format_1929"
- - meta3:
type: map
description: |
@@ -55,7 +54,7 @@ input:
description: Strobealign genome index file
pattern: "*.sti"
ontologies:
- - edam: "http://edamontology.org/data_3210" # Genome index
+ - edam: "http://edamontology.org/data_3210"
- sort_bam:
type: boolean
description: use samtools sort (true) or samtools view (false)
@@ -70,18 +69,17 @@ output:
description: Output BAM file containing read alignments
pattern: "*.{bam}"
ontologies:
- - edam: "http://edamontology.org/format_2572" # BAM
+ - edam: "http://edamontology.org/format_2572"
cram:
- - meta:
- type: file
- description: Output BAM file containing read alignments
- ontologies: []
+ type: map
+ description: Groovy Map containing sample information
- "*.cram":
type: file
description: Output CRAM file containing read alignments
pattern: "*.{cram}"
ontologies:
- - edam: "http://edamontology.org/format_3462" # CRAM
+ - edam: "http://edamontology.org/format_3462"
csi:
- - meta:
type: map
@@ -118,7 +116,7 @@ output:
description: Output TSV file containing read alignments
pattern: "*.{tsv.gz}"
ontologies:
- - edam: "http://edamontology.org/format_3475" # TSV
+ - edam: "http://edamontology.org/format_3475"
sti:
- - meta:
type: map
@@ -128,13 +126,65 @@ output:
description: Optional strobealign index file for fasta reference
pattern: "*.{sti}"
ontologies: []
+ versions_strobealign:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - strobealign:
+ type: string
+ description: The name of the tool
+ - strobealign --version:
+ 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
+ versions_pigz:
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - pigz --version 2>&1 | sed 's/pigz //':
+ type: eval
+ description: The expression to obtain the version of the tool
+topics:
versions:
- - versions.yml:
- type: file
- description: File containing software versions
- pattern: "versions.yml"
- ontologies:
- - edam: http://edamontology.org/format_3750 # YAML
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - strobealign:
+ type: string
+ description: The name of the tool
+ - strobealign --version:
+ 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
+ - - ${task.process}:
+ type: string
+ description: The name of the process
+ - pigz:
+ type: string
+ description: The name of the tool
+ - pigz --version 2>&1 | sed 's/pigz //':
+ type: eval
+ description: The expression to obtain the version of the tool
authors:
- "@matthdsm"
maintainers:
diff --git a/modules/nf-core/strobealign/tests/main.nf.test b/modules/nf-core/strobealign/tests/main.nf.test
index 360637c0..adab50bc 100644
--- a/modules/nf-core/strobealign/tests/main.nf.test
+++ b/modules/nf-core/strobealign/tests/main.nf.test
@@ -42,7 +42,7 @@ nextflow_process {
{ assert snapshot(
process.out.bam,
process.out.csi,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -78,7 +78,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
process.out.bam,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -115,7 +115,7 @@ nextflow_process {
{ assert snapshot(
cram(process.out.cram[0][1], 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/genome.fasta').getReadsMD5(),
file(process.out.crai[0][1]).exists(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -151,7 +151,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
cram(process.out.cram[0][1], 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/sarscov2/genome/genome.fasta').getReadsMD5(),
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -187,7 +187,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
process.out.paf,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -223,7 +223,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
process.out.tsv,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
@@ -259,7 +259,7 @@ nextflow_process {
{ assert process.success },
{ assert snapshot(
process.out.sti,
- process.out.versions
+ process.out.findAll { key, val -> key.startsWith("versions") }
).match() }
)
}
diff --git a/modules/nf-core/strobealign/tests/main.nf.test.snap b/modules/nf-core/strobealign/tests/main.nf.test.snap
index 2b8f54dd..7e53f32d 100644
--- a/modules/nf-core/strobealign/tests/main.nf.test.snap
+++ b/modules/nf-core/strobealign/tests/main.nf.test.snap
@@ -3,15 +3,35 @@
"content": [
"f3a1593b170cf1e9b9008b3afb77cc53",
true,
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:11:52.319915",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:55:51.0954"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"fastq - sti": {
"content": [
@@ -24,28 +44,68 @@
"genome.fasta.r150.sti:md5,1fa95f6ba0167a729ddc6a444eb5e8f7"
]
],
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:12:18.718682",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:31:45.186708"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"fastq - unsorted cram": {
"content": [
"57aeef88ed701a8ebc8e2f0a381b2a6",
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:11:59.009249",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:42:46.49042"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"fastq - tsv": {
"content": [
@@ -58,15 +118,35 @@
"test.tsv.gz:md5,1fcb7444ba029b7f41b3a836fec7ecac"
]
],
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:12:12.224719",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:31:39.58768"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"stub": {
"content": [
@@ -129,7 +209,25 @@
]
],
"7": [
- "versions.yml:md5,5de873596967072366007d67fe652250"
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ],
+ "8": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "9": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
],
"bam": [
[
@@ -188,16 +286,34 @@
"test.tsv.gz:md5,68b329da9893e34099c7d8ad5cb9c940"
]
],
- "versions": [
- "versions.yml:md5,5de873596967072366007d67fe652250"
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
]
}
],
+ "timestamp": "2026-02-18T14:12:25.287429",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T11:56:39.765352"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"fastq - unsorted bam": {
"content": [
@@ -210,15 +326,35 @@
"test.bam:md5,740d88010349b3cd487a8b6244c64c0d"
]
],
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:11:44.848089",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:31:18.225205"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"fastq - paf": {
"content": [
@@ -231,15 +367,35 @@
"test.paf.gz:md5,0992a1eb3dff9beca5849b9d1fc66390"
]
],
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:12:05.638183",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:31:34.790627"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"fastq - sorted bam": {
"content": [
@@ -261,14 +417,34 @@
"test.bam.csi:md5,8d53854f92b3f263db0ed27f4bbad054"
]
],
- [
- "versions.yml:md5,5de873596967072366007d67fe652250"
- ]
+ {
+ "versions_pigz": [
+ [
+ "STROBEALIGN",
+ "pigz",
+ "2.8"
+ ]
+ ],
+ "versions_samtools": [
+ [
+ "STROBEALIGN",
+ "samtools",
+ "1.22.1"
+ ]
+ ],
+ "versions_strobealign": [
+ [
+ "STROBEALIGN",
+ "strobealign",
+ "0.16.1"
+ ]
+ ]
+ }
],
+ "timestamp": "2026-02-18T14:11:38.040997",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-16T12:31:12.870782"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
index 4c65f558..f269c502 100644
--- a/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_preprocessing_pipeline/main.nf
@@ -37,8 +37,6 @@ workflow PIPELINE_INITIALISATION {
main:
- ch_versions = channel.empty()
-
//
// Print version and exit if required and dump pipeline parameters to JSON file
//
@@ -86,7 +84,6 @@ workflow PIPELINE_INITIALISATION {
emit:
samplesheet = ch_samplesheet
- versions = ch_versions
}
/*
diff --git a/subworkflows/nf-core/fastq_align_dna/main.nf b/subworkflows/nf-core/fastq_align_dna/main.nf
index 3e7cf051..b7d43c3f 100644
--- a/subworkflows/nf-core/fastq_align_dna/main.nf
+++ b/subworkflows/nf-core/fastq_align_dna/main.nf
@@ -5,12 +5,12 @@
//
-include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
-include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
-include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
-include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
-include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
-include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
+include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
+include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
+include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
+include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
+include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
+include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
diff --git a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test
index b65eec69..7fc3534b 100644
--- a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test
@@ -264,7 +264,6 @@ nextflow_workflow {
{ assert snapshot(
file(workflow.out.bam[0][1]).name,
file(workflow.out.reports[0][1]).readLines().findAll { it.startsWith("decompHash") },
- file(workflow.out.versions[0]).name
).match() }
)
}
@@ -298,7 +297,6 @@ nextflow_workflow {
{ assert snapshot(
file(workflow.out.bam[0][1]).name,
file(workflow.out.reports[0][1]).readLines().findAll { it.startsWith("decompHash") },
- file(workflow.out.versions[0]).name
).match() }
)
}
diff --git a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
index 60e6bea9..ca559836 100644
--- a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
@@ -12,11 +12,11 @@
]
],
+ "timestamp": "2026-02-09T16:57:50.690737",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.3"
- },
- "timestamp": "2026-02-09T16:57:50.690737"
+ }
},
"test_fastq_align_dragmap_PE": {
"content": [
@@ -28,14 +28,13 @@
"decompHashTableExtIndex...",
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
- ],
- "versions.yml"
+ ]
],
+ "timestamp": "2026-02-18T13:45:07.40135",
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-03-14T08:28:25.283436546"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_fastq_align_strobealign_PE": {
"content": [
@@ -56,7 +55,7 @@
],
"3": [
- "versions.yml:md5,9d1991417e63455f5e7fe9d67e5985a4"
+
],
"bam": [
[
@@ -74,15 +73,15 @@
],
"versions": [
- "versions.yml:md5,9d1991417e63455f5e7fe9d67e5985a4"
+
]
}
],
+ "timestamp": "2026-02-18T14:14:18.839697",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T14:32:08.743821"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_fastq_align_bwa_mem_SE": {
"content": [
@@ -94,14 +93,14 @@
],
[
- "versions.yml:md5,315f4ae70b5322c025925d84c887da18"
+
]
],
+ "timestamp": "2025-09-23T11:20:12.631487104",
"meta": {
"nf-test": "0.9.2",
"nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T11:20:12.631487104"
+ }
},
"test_fastq_align_bwamem2_SE": {
"content": [
@@ -116,11 +115,11 @@
]
],
+ "timestamp": "2026-02-09T16:57:37.848527",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.3"
- },
- "timestamp": "2026-02-09T16:57:37.848527"
+ }
},
"test_fastq_align_bwa_mem_PE": {
"content": [
@@ -132,25 +131,25 @@
],
[
- "versions.yml:md5,315f4ae70b5322c025925d84c887da18"
+
]
],
+ "timestamp": "2025-09-23T11:20:21.322039351",
"meta": {
"nf-test": "0.9.2",
"nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T11:20:21.322039351"
+ }
},
"test_fastq_align_bowtie2_SE": {
"content": [
"test.bam",
null
],
+ "timestamp": "2026-02-03T15:14:58.560970561",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.3"
- },
- "timestamp": "2026-02-03T15:14:58.560970561"
+ }
},
"test_fastq_align_dragmap_SE": {
"content": [
@@ -162,25 +161,24 @@
"decompHashTableExtIndex...",
"decompHashTableAutoHits...",
"decompHashTableSetFlags..."
- ],
- "versions.yml"
+ ]
],
+ "timestamp": "2026-02-18T13:49:05.298349",
"meta": {
- "nf-test": "0.8.4",
- "nextflow": "23.10.1"
- },
- "timestamp": "2024-03-14T08:28:12.991034375"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_fastq_align_bowtie2_PE": {
"content": [
"test.bam",
null
],
+ "timestamp": "2026-02-03T15:15:05.862448716",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.3"
- },
- "timestamp": "2026-02-03T15:15:05.862448716"
+ }
},
"test_fastq_align_snapaligner_PE": {
"content": [
@@ -201,7 +199,7 @@
],
"3": [
- "versions.yml:md5,e98be7da5d37b69852090365352c3534"
+
],
"bam": [
[
@@ -219,15 +217,15 @@
],
"versions": [
- "versions.yml:md5,e98be7da5d37b69852090365352c3534"
+
]
}
],
+ "timestamp": "2026-02-18T14:00:43.115798",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T12:03:34.617919741"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_fastq_align_strobealign_SE": {
"content": [
@@ -248,7 +246,7 @@
],
"3": [
- "versions.yml:md5,9d1991417e63455f5e7fe9d67e5985a4"
+
],
"bam": [
[
@@ -266,15 +264,15 @@
],
"versions": [
- "versions.yml:md5,9d1991417e63455f5e7fe9d67e5985a4"
+
]
}
],
+ "timestamp": "2026-02-18T14:14:11.896842",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T14:32:01.424171"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
},
"test_fastq_align_snapaligner_SE": {
"content": [
@@ -295,7 +293,7 @@
],
"3": [
- "versions.yml:md5,e98be7da5d37b69852090365352c3534"
+
],
"bam": [
[
@@ -313,14 +311,14 @@
],
"versions": [
- "versions.yml:md5,e98be7da5d37b69852090365352c3534"
+
]
}
],
+ "timestamp": "2026-02-18T14:00:35.613219",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
- },
- "timestamp": "2025-09-23T12:03:25.88186957"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
+ }
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 51056ddf..f6b202b0 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -42,7 +42,6 @@ workflow PREPROCESSING {
genelists // file: directory containing genelist bed files for coverage analysis
main:
- ch_versions = channel.empty()
ch_multiqc_files = channel.empty()
ch_samplesheet
@@ -323,7 +322,6 @@ workflow PREPROCESSING {
),
false,
)
- ch_versions = ch_versions.mix(MD5SUM.out.versions.first())
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -350,7 +348,7 @@ workflow PREPROCESSING {
"${process}:\n${tool_versions.join('\n')}"
}
- softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))
+ softwareVersionsToYAML(topic_versions.versions_file)
.mix(topic_versions_string)
.collectFile(
storeDir: "${params.outdir}/pipeline_info",
@@ -451,7 +449,6 @@ workflow PREPROCESSING {
multiqc_library_report = MULTIQC_LIBRARY.out.report
multiqc_library_data = MULTIQC_LIBRARY.out.data
multiqc_library_plots = MULTIQC_LIBRARY.out.plots
- versions = ch_versions
}
/*
From fde35f7d108db5d0c1a7ae207c07e61d9399f666 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 10:32:33 +0100
Subject: [PATCH 206/228] update snapshots
---
modules.json | 2 +-
.../bamsormadup/biobambam-bamsormadup.diff | 8 +-
.../fastq_align_dna/fastq_align_dna.diff | 25 +-----
.../fastq_align_dna/tests/main.nf.test | 6 --
.../fastq_align_dna/tests/main.nf.test.snap | 86 ++++++-------------
.../local/panelcoverage/main.nf.test.snap | 4 +-
.../local/bam_qc/main.nf.test.snap | 12 +--
.../local/coverage/main.nf.test.snap | 8 +-
.../local/fastq_align_rna/main.nf.test.snap | 8 +-
.../fastq_to_aligned_cram/main.nf.test.snap | 20 ++---
tests/workflows/preprocessing.nf.test.snap | 17 ++--
workflows/preprocessing.nf | 16 ++--
12 files changed, 74 insertions(+), 138 deletions(-)
diff --git a/modules.json b/modules.json
index 8d39bf4b..7a04dbc8 100644
--- a/modules.json
+++ b/modules.json
@@ -154,7 +154,7 @@
"nf-core": {
"fastq_align_dna": {
"branch": "master",
- "git_sha": "cf0eb2bed12c39c5b714d44dd02039a0cefaedb1",
+ "git_sha": "51cf05a850f58964b0d12ab92230348e567819e3",
"installed_by": ["subworkflows"],
"patch": "subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff"
},
diff --git a/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff b/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff
index ba8b093d..92881e2c 100644
--- a/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff
+++ b/modules/nf-core/biobambam/bamsormadup/biobambam-bamsormadup.diff
@@ -5,15 +5,15 @@ Changes in 'biobambam/bamsormadup/main.nf':
--- modules/nf-core/biobambam/bamsormadup/main.nf
+++ modules/nf-core/biobambam/bamsormadup/main.nf
@@ -8,8 +8,7 @@
- 'biocontainers/biobambam:2.0.185--h85de650_1'}"
+ : 'biocontainers/biobambam:2.0.185--h85de650_1'}"
input:
-- tuple val(meta) , path(bams, stageAs: "?/*")
-- tuple val(meta2), path(fasta)
+- tuple val(meta), path(bams, stageAs: "?/*")
+- tuple val(meta2), path(fasta), path(fai)
+ tuple val(meta) , path(bams, stageAs: "?/*"), path(fasta), path(fai)
output:
- tuple val(meta), path("*.bam") ,optional:true, emit: bam
+ tuple val(meta), path("*.bam"), optional: true, emit: bam
'modules/nf-core/biobambam/bamsormadup/tests/main.nf.test.snap' is unchanged
'modules/nf-core/biobambam/bamsormadup/tests/main.nf.test' is unchanged
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 5aec63ce..f2a4356b 100644
--- a/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
+++ b/subworkflows/nf-core/fastq_align_dna/fastq_align_dna.diff
@@ -3,24 +3,7 @@ Changes in component 'nf-core/fastq_align_dna'
Changes in 'fastq_align_dna/main.nf':
--- subworkflows/nf-core/fastq_align_dna/main.nf
+++ subworkflows/nf-core/fastq_align_dna/main.nf
-@@ -5,70 +5,75 @@
- //
-
-
--include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
--include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
--include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
--include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
--include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
--include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
-+include { BOWTIE2_ALIGN } from "../../../modules/nf-core/bowtie2/align/main"
-+include { BWA_MEM as BWAMEM1_MEM } from '../../../modules/nf-core/bwa/mem/main'
-+include { BWAMEM2_MEM as BWAMEM2_MEM } from '../../../modules/nf-core/bwamem2/mem/main'
-+include { DRAGMAP_ALIGN } from "../../../modules/nf-core/dragmap/align/main"
-+include { SNAPALIGNER_ALIGN as SNAP_ALIGN } from '../../../modules/nf-core/snapaligner/align/main'
-+include { STROBEALIGN } from "../../../modules/nf-core/strobealign/main"
-
-
+@@ -16,53 +16,64 @@
workflow FASTQ_ALIGN_DNA {
take:
@@ -37,7 +20,6 @@ Changes in 'fastq_align_dna/main.nf':
- ch_bam_index = Channel.empty()
- ch_bam = Channel.empty()
- ch_reports = Channel.empty()
-- ch_versions = Channel.empty()
+ ch_bam_index = channel.empty()
+ ch_bam = channel.empty()
+ ch_reports = channel.empty()
@@ -66,7 +48,6 @@ Changes in 'fastq_align_dna/main.nf':
- BWAMEM1_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem
- ch_bam = ch_bam.mix(BWAMEM1_MEM.out.bam)
- ch_bam_index = ch_bam_index.mix(BWAMEM1_MEM.out.csi)
-- ch_versions = ch_versions.mix(BWAMEM1_MEM.out.versions)
- }
- else if (aligner == 'bwamem2'){
- BWAMEM2_MEM (ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is bwa-mem2
@@ -76,19 +57,16 @@ Changes in 'fastq_align_dna/main.nf':
- DRAGMAP_ALIGN(ch_reads, ch_aligner_index, ch_fasta, sort) // If aligner is dragmap
- ch_bam = ch_bam.mix(DRAGMAP_ALIGN.out.bam)
- ch_reports = ch_reports.mix(DRAGMAP_ALIGN.out.log)
-- ch_versions = ch_versions.mix(DRAGMAP_ALIGN.out.versions)
- }
- else if (aligner == 'snap'){
- SNAP_ALIGN (ch_reads, ch_aligner_index) // If aligner is snap
- ch_bam = ch_bam.mix(SNAP_ALIGN.out.bam)
- ch_bam_index.mix(SNAP_ALIGN.out.bai)
-- ch_versions = ch_versions.mix(SNAP_ALIGN.out.versions)
- }
- else if (aligner == 'strobealign'){
- STROBEALIGN (ch_reads, ch_fasta, ch_aligner_index, sort) // If aligner is strobealign
- ch_bam = ch_bam.mix(STROBEALIGN.out.bam)
- ch_bam_index = ch_bam_index.mix(STROBEALIGN.out.csi)
-- ch_versions = ch_versions.mix(STROBEALIGN.out.versions)
- }
- else {
- error "Unknown aligner: ${aligner}"
@@ -128,7 +106,6 @@ Changes in 'fastq_align_dna/main.nf':
- bam = ch_bam // channel: [ [meta], bam ]
- bam_index = ch_bam_index // channel: [ [meta], csi/bai ]
- reports = ch_reports // channel: [ [meta], log ]
-- versions = ch_versions // channel: [ versions.yml ]
+ bam = ch_bam // channel: [ [meta], bam ]
+ bam_index = ch_bam_index // channel: [ [meta], csi/bai ]
+ reports = ch_reports // channel: [ [meta], log ]
diff --git a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test
index 7fc3534b..b1b3c1c9 100644
--- a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test
+++ b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test
@@ -52,7 +52,6 @@ nextflow_workflow {
{ assert workflow.success},
{ assert snapshot(
file(workflow.out.bam[0][1]).name,
- workflow.out.versions[0]
).match() }
)
}
@@ -86,7 +85,6 @@ nextflow_workflow {
{ assert workflow.success},
{ assert snapshot(
file(workflow.out.bam[0][1]).name,
- workflow.out.versions[0]
).match() }
)
}
@@ -121,7 +119,6 @@ nextflow_workflow {
file(workflow.out.bam[0][1]).name,
workflow.out.bam_index,
workflow.out.reports,
- workflow.out.versions,
).match()
}
)
@@ -157,7 +154,6 @@ nextflow_workflow {
file(workflow.out.bam[0][1]).name,
workflow.out.bam_index,
workflow.out.reports,
- workflow.out.versions,
).match()
}
)
@@ -193,7 +189,6 @@ nextflow_workflow {
file(workflow.out.bam[0][1]).name,
workflow.out.bam_index,
workflow.out.reports,
- workflow.out.versions,
).match()
}
)
@@ -229,7 +224,6 @@ nextflow_workflow {
file(workflow.out.bam[0][1]).name,
workflow.out.bam_index,
workflow.out.reports,
- workflow.out.versions,
).match()
}
)
diff --git a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
index ca559836..f002d8a4 100644
--- a/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
+++ b/subworkflows/nf-core/fastq_align_dna/tests/main.nf.test.snap
@@ -7,15 +7,12 @@
],
[
- ],
- [
-
]
],
- "timestamp": "2026-02-09T16:57:50.690737",
+ "timestamp": "2026-02-18T14:49:11.253548",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
}
},
"test_fastq_align_dragmap_PE": {
@@ -53,9 +50,6 @@
],
"2": [
- ],
- "3": [
-
],
"bam": [
[
@@ -71,13 +65,10 @@
],
"reports": [
- ],
- "versions": [
-
]
}
],
- "timestamp": "2026-02-18T14:14:18.839697",
+ "timestamp": "2026-02-18T14:49:56.04299",
"meta": {
"nf-test": "0.9.4",
"nextflow": "25.10.4"
@@ -91,15 +82,12 @@
],
[
- ],
- [
-
]
],
- "timestamp": "2025-09-23T11:20:12.631487104",
+ "timestamp": "2026-02-18T14:48:28.855536",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
}
},
"test_fastq_align_bwamem2_SE": {
@@ -110,15 +98,12 @@
],
[
- ],
- [
-
]
],
- "timestamp": "2026-02-09T16:57:37.848527",
+ "timestamp": "2026-02-18T14:48:54.331973",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
}
},
"test_fastq_align_bwa_mem_PE": {
@@ -129,26 +114,22 @@
],
[
- ],
- [
-
]
],
- "timestamp": "2025-09-23T11:20:21.322039351",
+ "timestamp": "2026-02-18T14:48:37.392571",
"meta": {
- "nf-test": "0.9.2",
- "nextflow": "25.04.7"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
}
},
"test_fastq_align_bowtie2_SE": {
"content": [
- "test.bam",
- null
+ "test.bam"
],
- "timestamp": "2026-02-03T15:14:58.560970561",
+ "timestamp": "2026-02-18T14:48:09.863021",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
}
},
"test_fastq_align_dragmap_SE": {
@@ -171,13 +152,12 @@
},
"test_fastq_align_bowtie2_PE": {
"content": [
- "test.bam",
- null
+ "test.bam"
],
- "timestamp": "2026-02-03T15:15:05.862448716",
+ "timestamp": "2026-02-18T14:48:20.207038",
"meta": {
- "nf-test": "0.9.3",
- "nextflow": "25.10.3"
+ "nf-test": "0.9.4",
+ "nextflow": "25.10.4"
}
},
"test_fastq_align_snapaligner_PE": {
@@ -197,9 +177,6 @@
],
"2": [
- ],
- "3": [
-
],
"bam": [
[
@@ -215,13 +192,10 @@
],
"reports": [
- ],
- "versions": [
-
]
}
],
- "timestamp": "2026-02-18T14:00:43.115798",
+ "timestamp": "2026-02-18T14:49:42.350796",
"meta": {
"nf-test": "0.9.4",
"nextflow": "25.10.4"
@@ -244,9 +218,6 @@
],
"2": [
- ],
- "3": [
-
],
"bam": [
[
@@ -262,13 +233,10 @@
],
"reports": [
- ],
- "versions": [
-
]
}
],
- "timestamp": "2026-02-18T14:14:11.896842",
+ "timestamp": "2026-02-18T14:49:49.102483",
"meta": {
"nf-test": "0.9.4",
"nextflow": "25.10.4"
@@ -291,9 +259,6 @@
],
"2": [
- ],
- "3": [
-
],
"bam": [
[
@@ -309,13 +274,10 @@
],
"reports": [
- ],
- "versions": [
-
]
}
],
- "timestamp": "2026-02-18T14:00:35.613219",
+ "timestamp": "2026-02-18T14:49:34.584076",
"meta": {
"nf-test": "0.9.4",
"nextflow": "25.10.4"
diff --git a/tests/modules/local/panelcoverage/main.nf.test.snap b/tests/modules/local/panelcoverage/main.nf.test.snap
index 4a912279..49122c84 100644
--- a/tests/modules/local/panelcoverage/main.nf.test.snap
+++ b/tests/modules/local/panelcoverage/main.nf.test.snap
@@ -50,10 +50,10 @@
]
}
],
+ "timestamp": "2026-02-11T19:45:02.994288",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T19:45:02.994288"
+ }
}
}
\ No newline at end of file
diff --git a/tests/subworkflows/local/bam_qc/main.nf.test.snap b/tests/subworkflows/local/bam_qc/main.nf.test.snap
index 5b809485..5c83a450 100644
--- a/tests/subworkflows/local/bam_qc/main.nf.test.snap
+++ b/tests/subworkflows/local/bam_qc/main.nf.test.snap
@@ -79,11 +79,11 @@
]
}
],
+ "timestamp": "2026-02-11T20:41:14.126057",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:41:14.126057"
+ }
},
"Bam QC - Samtools": {
"content": [
@@ -132,11 +132,11 @@
]
}
],
+ "timestamp": "2026-02-11T20:27:00.941719",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:27:00.941719"
+ }
},
"Bam QC - WGSmetrics": {
"content": [
@@ -218,10 +218,10 @@
]
}
],
+ "timestamp": "2026-02-11T20:26:15.482881",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:26:15.482881"
+ }
}
}
\ No newline at end of file
diff --git a/tests/subworkflows/local/coverage/main.nf.test.snap b/tests/subworkflows/local/coverage/main.nf.test.snap
index 9934ac1f..cb468e45 100644
--- a/tests/subworkflows/local/coverage/main.nf.test.snap
+++ b/tests/subworkflows/local/coverage/main.nf.test.snap
@@ -248,11 +248,11 @@
]
}
],
+ "timestamp": "2026-02-11T22:37:17.825377",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T22:37:17.825377"
+ }
},
"Coverage - seqcap": {
"content": [
@@ -497,10 +497,10 @@
]
}
],
+ "timestamp": "2026-02-11T22:36:21.526017",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T22:36:21.526017"
+ }
}
}
\ No newline at end of file
diff --git a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
index 88691d56..900be6c9 100644
--- a/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_align_rna/main.nf.test.snap
@@ -96,11 +96,11 @@
]
}
],
+ "timestamp": "2026-02-11T22:49:27.454517",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T22:49:27.454517"
+ }
},
"fastq align rna - unknown aligner": {
"content": [
@@ -108,10 +108,10 @@
"Unsupported aligner woop for sample test"
]
],
+ "timestamp": "2024-05-28T16:17:08.089796673",
"meta": {
"nf-test": "0.8.4",
"nextflow": "24.04.1"
- },
- "timestamp": "2024-05-28T16:17:08.089796673"
+ }
}
}
\ No newline at end of file
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index eb4e865f..7b141c66 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -36,11 +36,11 @@
]
}
],
+ "timestamp": "2026-02-11T20:19:51.825749",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:19:51.825749"
+ }
},
"fastq to cram - bwa - bamsormadup": {
"content": [
@@ -95,11 +95,11 @@
]
}
],
+ "timestamp": "2026-02-11T20:10:31.616836",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:10:31.616836"
+ }
},
"fastq to cram - bwa - samtools sormadup": {
"content": [
@@ -154,11 +154,11 @@
]
}
],
+ "timestamp": "2026-02-11T20:15:15.495706",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:15:15.495706"
+ }
},
"fastq to cram - star - bamsormadup": {
"content": [
@@ -249,11 +249,11 @@
]
}
],
+ "timestamp": "2026-02-11T20:13:35.19973",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:13:35.19973"
+ }
},
"fastq to cram - bwa - samtools sort": {
"content": [
@@ -292,10 +292,10 @@
]
}
],
+ "timestamp": "2026-02-11T20:16:26.285299",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T20:16:26.285299"
+ }
}
}
\ No newline at end of file
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index fc2144f1..1ec63a2b 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -705,11 +705,11 @@
]
}
],
+ "timestamp": "2026-02-11T21:21:37.068608",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T21:21:37.068608"
+ }
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
@@ -1077,11 +1077,11 @@
]
}
],
+ "timestamp": "2026-02-11T21:25:53.804729",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T21:25:53.804729"
+ }
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
@@ -1687,16 +1687,13 @@
},
"sample1.merged.metrics.txt:md5,01b7286134f5cb6530c3bab2c86fd169"
]
- ],
- "versions": [
- "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d"
]
}
],
+ "timestamp": "2026-02-18T15:49:18.459258",
"meta": {
- "nf-test": "0.9.3",
+ "nf-test": "0.9.4",
"nextflow": "25.10.4"
- },
- "timestamp": "2026-02-11T22:18:07.06828"
+ }
}
}
\ No newline at end of file
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index f6b202b0..6d85647e 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -83,7 +83,7 @@ workflow PREPROCESSING {
return [meta, reports.find { report -> report.name == "fastq_list.csv" }]
},
BCLCONVERT.out.fastq,
- ).map { meta, fastq -> [meta.rg.SM, meta, fastq] }.set { ch_demultiplexed_fastq }
+ ).map { meta, fastq -> [meta.readgroup.SM, meta, fastq] }.set { ch_demultiplexed_fastq }
ch_illumina_flowcell.info
.flatten()
@@ -386,11 +386,17 @@ workflow PREPROCESSING {
library: meta.id != 'main'
return [meta, files instanceof List ? files : [files]]
}
- ch_multiqc_files.main.dump(tag: "MULTIQC files - main", pretty: true)
- ch_multiqc_files.library.dump(tag: "MULTIQC files - library", 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_multiqc_files.main.collect().map { files -> [[id: 'main'], files] },
+ ch_main_multiqc_files,
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
@@ -399,7 +405,7 @@ workflow PREPROCESSING {
)
MULTIQC_LIBRARY(
- ch_multiqc_files.library.transpose(by: 1).groupTuple(),
+ ch_library_multiqc_files,
ch_multiqc_config.toList(),
ch_multiqc_custom_config.toList(),
ch_multiqc_logo.toList(),
From 88c974a4d067451710234aef5f43272500d67f91 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 10:38:58 +0100
Subject: [PATCH 207/228] changelog
---
CHANGELOG.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aeda298e..d1c950fb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 3.0.0dev
+- 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.
- Bump all modules to latest versions.
- The workflow now outputs data in a subdirectory per `library`, including a library specific MultiQC report
-- Drop support for unaligned cram outputs.
+- Drop support for unaligned cram outputs in favor of untrimmed fastq outputs, which are more widely supported and can be used for a wider range of downstream analyses.
- Add support for untrimmed fastq outputs for unsupported genomes or when aligner is set to `false`.
- Drop support for global `aligner` parameter. The aligner must now be specified per sample in the sample sheet or sample info.
- Drop support for global `markdup` and `umi_aware` parameters. Marking duplicates must now be specified per sample in the sample sheet or sample info.
From 2ba5c5cacbc2d82f535573466bb5b6f7d226c116 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 10:39:35 +0100
Subject: [PATCH 208/228] changelog
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d1c950fb..18e37743 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## 3.0.0dev
+## 3.0.0
- Update pipeline to use topic channels only, deprecation `versions` channels
- Drop `bcl_demultiplex` subworkflow in favour of `bcl-convert` module
From 32b356508295d2ba83d598c2e63fb6bfafdfd153 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 10:43:10 +0100
Subject: [PATCH 209/228] update snapshot
---
tests/workflows/preprocessing.nf.test.snap | 136 ++++++++++-----------
1 file changed, 65 insertions(+), 71 deletions(-)
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 1ec63a2b..6df9010a 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"crams": [
[
@@ -36,22 +36,22 @@
]
],
"demultiplex_fastq": [
-
+
],
"demultiplex_interop": [
-
+
],
"demultiplex_logs": [
-
+
],
"demultiplex_reports": [
-
+
],
"falco_html": [
-
+
],
"falco_txt": [
-
+
],
"fastp_html": [
[
@@ -240,7 +240,7 @@
]
],
"mosdepth_per_base_d4": [
-
+
],
"mosdepth_quantized_bed": [
[
@@ -417,16 +417,16 @@
]
],
"mosdepth_thresholds_bed": [
-
+
],
"mosdepth_thresholds_csi": [
-
+
],
"multiqc_library_data": [
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -438,7 +438,7 @@
],
"multiqc_main_plots": [
[
-
+
]
],
"multiqc_main_report": [
@@ -447,7 +447,7 @@
]
],
"panelcoverage": [
-
+
],
"picard_hsmetrics": [
[
@@ -547,13 +547,13 @@
]
],
"picard_wgsmetrics": [
-
+
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"samtools_coverage": [
[
@@ -699,9 +699,6 @@
},
"sample1.merged.metrics.txt:md5,01b7286134f5cb6530c3bab2c86fd169"
]
- ],
- "versions": [
- "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d"
]
}
],
@@ -715,7 +712,7 @@
"content": [
{
"align_reports": [
-
+
],
"crams": [
[
@@ -749,22 +746,22 @@
]
],
"demultiplex_fastq": [
-
+
],
"demultiplex_interop": [
-
+
],
"demultiplex_logs": [
-
+
],
"demultiplex_reports": [
-
+
],
"falco_html": [
-
+
],
"falco_txt": [
-
+
],
"fastp_html": [
[
@@ -869,46 +866,46 @@
]
],
"mosdepth_global": [
-
+
],
"mosdepth_per_base_bed": [
-
+
],
"mosdepth_per_base_csi": [
-
+
],
"mosdepth_per_base_d4": [
-
+
],
"mosdepth_quantized_bed": [
-
+
],
"mosdepth_quantized_csi": [
-
+
],
"mosdepth_regions": [
-
+
],
"mosdepth_regions_bed": [
-
+
],
"mosdepth_regions_csi": [
-
+
],
"mosdepth_summary": [
-
+
],
"mosdepth_thresholds_bed": [
-
+
],
"mosdepth_thresholds_csi": [
-
+
],
"multiqc_library_data": [
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -920,7 +917,7 @@
],
"multiqc_main_plots": [
[
-
+
]
],
"multiqc_main_report": [
@@ -929,28 +926,28 @@
]
],
"panelcoverage": [
-
+
],
"picard_hsmetrics": [
-
+
],
"picard_multiplemetrics": [
-
+
],
"picard_multiplemetrics_pdf": [
-
+
],
"picard_wgsmetrics": [
-
+
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"samtools_coverage": [
-
+
],
"samtools_flagstat": [
[
@@ -1071,9 +1068,6 @@
},
"sample1.merged.metrics.txt:md5,01b7286134f5cb6530c3bab2c86fd169"
]
- ],
- "versions": [
- "versions.yml:md5,c7a35abdd7b3bdda729b3e782bf5f73d"
]
}
],
@@ -1087,7 +1081,7 @@
"content": [
{
"align_reports": [
-
+
],
"crams": [
[
@@ -1119,22 +1113,22 @@
]
],
"demultiplex_fastq": [
-
+
],
"demultiplex_interop": [
-
+
],
"demultiplex_logs": [
-
+
],
"demultiplex_reports": [
-
+
],
"falco_html": [
-
+
],
"falco_txt": [
-
+
],
"fastp_html": [
[
@@ -1317,7 +1311,7 @@
]
],
"mosdepth_per_base_d4": [
-
+
],
"mosdepth_quantized_bed": [
[
@@ -1376,13 +1370,13 @@
]
],
"mosdepth_regions": [
-
+
],
"mosdepth_regions_bed": [
-
+
],
"mosdepth_regions_csi": [
-
+
],
"mosdepth_summary": [
[
@@ -1413,16 +1407,16 @@
]
],
"mosdepth_thresholds_bed": [
-
+
],
"mosdepth_thresholds_csi": [
-
+
],
"multiqc_library_data": [
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -1434,7 +1428,7 @@
],
"multiqc_main_plots": [
[
-
+
]
],
"multiqc_main_report": [
@@ -1443,10 +1437,10 @@
]
],
"panelcoverage": [
-
+
],
"picard_hsmetrics": [
-
+
],
"picard_multiplemetrics": [
[
@@ -1543,10 +1537,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"samtools_coverage": [
[
@@ -1696,4 +1690,4 @@
"nextflow": "25.10.4"
}
}
-}
\ No newline at end of file
+}
From 92881ae12850bd3347206d11bc9e927dae75934a Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 11:10:10 +0100
Subject: [PATCH 210/228] fix snapshots
---
.../local/fastq_to_aligned_cram/main.nf.test | 2 +-
.../fastq_to_aligned_cram/main.nf.test.snap | 34 ++---
tests/workflows/preprocessing.nf.test.snap | 142 +++++++++---------
3 files changed, 89 insertions(+), 89 deletions(-)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
index 549854ff..c71d4c34 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
@@ -86,7 +86,7 @@ nextflow_workflow {
{
assert workflow.success
assert snapshot(
- sanitizeOutput(workflow.out, unstableKeys:["cram_crai"])
+ sanitizeOutput(workflow.out, unstableKeys:["cram_crai","junctions"])
).match()
}
)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index 7b141c66..86cb09c1 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -26,13 +26,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
]
}
],
@@ -46,7 +46,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -69,10 +69,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -105,7 +105,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -128,10 +128,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -164,7 +164,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -204,7 +204,7 @@
}
}
},
- "test.Chimeric.out.junction:md5,b560229eb850489cf0cc6f60baee57b5"
+ "test.Chimeric.out.junction"
]
],
"rna_splice_junctions": [
@@ -259,7 +259,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -282,13 +282,13 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
]
}
],
@@ -298,4 +298,4 @@
"nextflow": "25.10.4"
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/workflows/preprocessing.nf.test.snap b/tests/workflows/preprocessing.nf.test.snap
index 6df9010a..e6421b43 100644
--- a/tests/workflows/preprocessing.nf.test.snap
+++ b/tests/workflows/preprocessing.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"crams": [
[
@@ -36,22 +36,22 @@
]
],
"demultiplex_fastq": [
-
+
],
"demultiplex_interop": [
-
+
],
"demultiplex_logs": [
-
+
],
"demultiplex_reports": [
-
+
],
"falco_html": [
-
+
],
"falco_txt": [
-
+
],
"fastp_html": [
[
@@ -240,7 +240,7 @@
]
],
"mosdepth_per_base_d4": [
-
+
],
"mosdepth_quantized_bed": [
[
@@ -417,16 +417,16 @@
]
],
"mosdepth_thresholds_bed": [
-
+
],
"mosdepth_thresholds_csi": [
-
+
],
"multiqc_library_data": [
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -438,7 +438,7 @@
],
"multiqc_main_plots": [
[
-
+
]
],
"multiqc_main_report": [
@@ -447,7 +447,7 @@
]
],
"panelcoverage": [
-
+
],
"picard_hsmetrics": [
[
@@ -547,13 +547,13 @@
]
],
"picard_wgsmetrics": [
-
+
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"samtools_coverage": [
[
@@ -702,17 +702,17 @@
]
}
],
- "timestamp": "2026-02-11T21:21:37.068608",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-11T21:21:37.068608"
},
"preprocessing - fastq - bwa - bamsormadup - roi - no coverage/no picard": {
"content": [
{
"align_reports": [
-
+
],
"crams": [
[
@@ -746,22 +746,22 @@
]
],
"demultiplex_fastq": [
-
+
],
"demultiplex_interop": [
-
+
],
"demultiplex_logs": [
-
+
],
"demultiplex_reports": [
-
+
],
"falco_html": [
-
+
],
"falco_txt": [
-
+
],
"fastp_html": [
[
@@ -866,46 +866,46 @@
]
],
"mosdepth_global": [
-
+
],
"mosdepth_per_base_bed": [
-
+
],
"mosdepth_per_base_csi": [
-
+
],
"mosdepth_per_base_d4": [
-
+
],
"mosdepth_quantized_bed": [
-
+
],
"mosdepth_quantized_csi": [
-
+
],
"mosdepth_regions": [
-
+
],
"mosdepth_regions_bed": [
-
+
],
"mosdepth_regions_csi": [
-
+
],
"mosdepth_summary": [
-
+
],
"mosdepth_thresholds_bed": [
-
+
],
"mosdepth_thresholds_csi": [
-
+
],
"multiqc_library_data": [
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -917,7 +917,7 @@
],
"multiqc_main_plots": [
[
-
+
]
],
"multiqc_main_report": [
@@ -926,28 +926,28 @@
]
],
"panelcoverage": [
-
+
],
"picard_hsmetrics": [
-
+
],
"picard_multiplemetrics": [
-
+
],
"picard_multiplemetrics_pdf": [
-
+
],
"picard_wgsmetrics": [
-
+
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"samtools_coverage": [
-
+
],
"samtools_flagstat": [
[
@@ -1071,17 +1071,17 @@
]
}
],
- "timestamp": "2026-02-11T21:25:53.804729",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-11T21:25:53.804729"
},
"preprocessing - fastq - bwa - bamsormadup - no roi": {
"content": [
{
"align_reports": [
-
+
],
"crams": [
[
@@ -1113,22 +1113,22 @@
]
],
"demultiplex_fastq": [
-
+
],
"demultiplex_interop": [
-
+
],
"demultiplex_logs": [
-
+
],
"demultiplex_reports": [
-
+
],
"falco_html": [
-
+
],
"falco_txt": [
-
+
],
"fastp_html": [
[
@@ -1311,7 +1311,7 @@
]
],
"mosdepth_per_base_d4": [
-
+
],
"mosdepth_quantized_bed": [
[
@@ -1370,13 +1370,13 @@
]
],
"mosdepth_regions": [
-
+
],
"mosdepth_regions_bed": [
-
+
],
"mosdepth_regions_csi": [
-
+
],
"mosdepth_summary": [
[
@@ -1407,16 +1407,16 @@
]
],
"mosdepth_thresholds_bed": [
-
+
],
"mosdepth_thresholds_csi": [
-
+
],
"multiqc_library_data": [
"test_data"
],
"multiqc_library_plots": [
-
+
],
"multiqc_library_report": [
"test.html"
@@ -1428,7 +1428,7 @@
],
"multiqc_main_plots": [
[
-
+
]
],
"multiqc_main_report": [
@@ -1437,10 +1437,10 @@
]
],
"panelcoverage": [
-
+
],
"picard_hsmetrics": [
-
+
],
"picard_multiplemetrics": [
[
@@ -1537,10 +1537,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"samtools_coverage": [
[
@@ -1684,10 +1684,10 @@
]
}
],
- "timestamp": "2026-02-18T15:49:18.459258",
"meta": {
"nf-test": "0.9.4",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-18T15:49:18.459258"
}
-}
+}
\ No newline at end of file
From 6fd01c9f9042beb247df34224feae2f7307c9c6d Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 11:36:38 +0100
Subject: [PATCH 211/228] fix snapshots
---
.../local/fastq_to_aligned_cram/main.nf.test | 2 +-
.../fastq_to_aligned_cram/main.nf.test.snap | 66 +++++++++----------
2 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
index c71d4c34..65b68c4c 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test
@@ -86,7 +86,7 @@ nextflow_workflow {
{
assert workflow.success
assert snapshot(
- sanitizeOutput(workflow.out, unstableKeys:["cram_crai","junctions"])
+ sanitizeOutput(workflow.out, unstableKeys:["cram_crai","rna_junctions"])
).match()
}
)
diff --git a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
index 86cb09c1..e5a3ef5f 100644
--- a/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
+++ b/tests/subworkflows/local/fastq_to_aligned_cram/main.nf.test.snap
@@ -3,7 +3,7 @@
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -26,27 +26,27 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
]
}
],
- "timestamp": "2026-02-11T20:19:51.825749",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-11T20:19:51.825749"
},
"fastq to cram - bwa - bamsormadup": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -69,10 +69,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -95,17 +95,17 @@
]
}
],
- "timestamp": "2026-02-11T20:10:31.616836",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-11T20:10:31.616836"
},
"fastq to cram - bwa - samtools sormadup": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -128,10 +128,10 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
[
@@ -154,17 +154,17 @@
]
}
],
- "timestamp": "2026-02-11T20:15:15.495706",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-11T20:15:15.495706"
},
"fastq to cram - star - bamsormadup": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -192,16 +192,16 @@
{
"groupSize": 1,
"groupTarget": {
- "id": "test",
- "samplename": "test",
- "single_end": false,
- "sample_type": "RNA",
- "markdup": "bamsormadup",
"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",
+ "fasta": "s3://test-data/genomics/homo_sapiens/genome/seq/GCA_000001405.15_GRCh38_full_plus_hs38d1_analysis_set_chr21.fna",
"star": "s3://test-data/genomics/homo_sapiens/genome/star/"
- }
+ },
+ "id": "test",
+ "markdup": "bamsormadup",
+ "sample_type": "RNA",
+ "samplename": "test",
+ "single_end": false
}
},
"test.Chimeric.out.junction"
@@ -249,17 +249,17 @@
]
}
],
- "timestamp": "2026-02-11T20:13:35.19973",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-19T11:32:22.214357"
},
"fastq to cram - bwa - samtools sort": {
"content": [
{
"align_reports": [
-
+
],
"cram_crai": [
[
@@ -282,20 +282,20 @@
]
],
"rna_junctions": [
-
+
],
"rna_splice_junctions": [
-
+
],
"sormadup_metrics": [
-
+
]
}
],
- "timestamp": "2026-02-11T20:16:26.285299",
"meta": {
"nf-test": "0.9.3",
"nextflow": "25.10.4"
- }
+ },
+ "timestamp": "2026-02-11T20:16:26.285299"
}
-}
+}
\ No newline at end of file
From e12465583328908ce6089e722495eb8086426ac7 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Thu, 19 Feb 2026 12:54:12 +0100
Subject: [PATCH 212/228] small cleanup
---
workflows/preprocessing.nf | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/workflows/preprocessing.nf b/workflows/preprocessing.nf
index 6d85647e..e402edc9 100644
--- a/workflows/preprocessing.nf
+++ b/workflows/preprocessing.nf
@@ -11,7 +11,6 @@ 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 { MOSDEPTH } from '../modules/nf-core/mosdepth/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'
@@ -38,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()
@@ -331,7 +330,8 @@ 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 b395ef1fcb5a2438ff44fc7e20e6b089d05ea076 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 213/228] 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 000d81cd8f66021b39f70d97406830fd2c26f09c 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 214/228] 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 a1355fd7fd8d2e1a9c67df2977488608d151d9cf 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 215/228] 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 10247f5b15839785214602f97f5dae9a3899447a 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 216/228] 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 f36dc71316cd29840f1fbb14b31960925e4089ef 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 217/228] 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 a51dd1f2754c17ea9edb288c56a6a226366a0d40 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 218/228] 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 8a3742c1776478d2e4ad12ca7dfb9d58cbbe3b0e 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 219/228] 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 620e31c33a05d11ef8aaa4211e58df7d4d740132 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 220/228] 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 df6952a9e38b919735e941cce49d52930325c751 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 221/228] 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 da7621b29d27ef57ce2a9195e91f708126d67e6a 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 222/228] 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 @@
[](https://www.nextflow.io/)
[](https://github.com/nf-core/tools/releases/tag/3.5.1)
-[](https://docs.conda.io/en/latest/)
[](https://www.docker.com/)
[](https://sylabs.io/docs/)
[](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 R egions O f I nterest 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[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[](https://docs.conda.io/en/latest/)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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\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[](https://github.com/codespaces/new/nf-cmgg/preprocessing)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/nf-test.yml)\n[](https://github.com/nf-cmgg/preprocessing/actions/workflows/linting.yml)[](https://doi.org/10.5281/zenodo.XXXXXXX)\n[](https://www.nf-test.com)\n\n[](https://www.nextflow.io/)\n[](https://github.com/nf-core/tools/releases/tag/3.5.1)\n[](https://www.docker.com/)\n[](https://sylabs.io/docs/)\n[](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\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 75d9460d25ef33a4c1d6f5b3c32d3b62707daad4 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 223/228] 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 6620a298d7f2316d0f7691504e65a073fad3c695 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 224/228] 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 d396daee5d2f8654f9575f3c2ebf84afa7cc56af 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 225/228] 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. Help Set 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. Help Use 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. Help If 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. Help If 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. Help The 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. Help An 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 Help Incoming 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`) Help The 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. Help An 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 Help Incoming 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. Help Do 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. Help If 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 2a732449a476cdc01c45885d7eb90e624a1ceed8 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 226/228] 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 6064f40407dde76fcf29bbb29e2db41086844340 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 227/228] 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 6981bdc2da8daec7953698784b372b93c6891c92 Mon Sep 17 00:00:00 2001
From: Matthias De Smet <11850640+matthdsm@users.noreply.github.com>
Date: Fri, 6 Mar 2026 11:55:38 +0100
Subject: [PATCH 228/228] Fix docs and new metro map
---
CHANGELOG.md | 2 +-
README.md | 51 +-
assets/schema_input.json | 4 +-
docs/images/metro_map.png | Bin 212847 -> 0 bytes
docs/images/metro_map.svg | 1263 -----------------
docs/images/metro_map_dark.md | 45 +
docs/images/metro_map_dark.svg | 99 ++
docs/images/metro_map_light.md | 45 +
docs/images/metro_map_light.svg | 104 ++
.../nf-cmgg-preprocessing_logo_dark.png | Bin 78416 -> 65764 bytes
.../nf-cmgg-preprocessing_logo_dark.svg | 16 +-
.../nf-cmgg-preprocessing_logo_light.png | Bin 79022 -> 65952 bytes
.../nf-cmgg-preprocessing_logo_light.svg | 14 +-
docs/output.md | 8 +-
docs/parameters.md | 8 +-
docs/usage.md | 141 +-
16 files changed, 409 insertions(+), 1391 deletions(-)
delete mode 100644 docs/images/metro_map.png
delete mode 100644 docs/images/metro_map.svg
create mode 100644 docs/images/metro_map_dark.md
create mode 100644 docs/images/metro_map_dark.svg
create mode 100644 docs/images/metro_map_light.md
create mode 100644 docs/images/metro_map_light.svg
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 119479bf..2d6849f9 100644
--- a/README.md
+++ b/README.md
@@ -18,17 +18,23 @@ 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:
-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 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/)
-
+
+
+
+
+
+
## Usage
@@ -37,36 +43,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/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/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
zcmY&=2RxQ-|M#ULg^Wr@h>C`lEuyScl1gTF$R-h)Aq|xzTUjZxXOfJp%F0Mawv5Q$
z!uvgYp8xy)-{pHLVIF8@%yME^bHPzEJ+gY}gNFyn6xuv&~*v+mS@tQBM3rR&AGb4S&geQ&H>YWjnK*w~TI>l5X9)#cyG2?Z$O5G)Tyz7?w?jI}SQhBxAKR;Ut{aBO1j=hm%hVKN
z8gzKg7slIjhD912or49b%f0F3bWWPwVb|enl_1xVQw(YMEXoCgwR^
zQD&v2ruIuoIco0JTYASvYrh;Nr=LhjZrah4l&-7K!@^8v2EXh&R9s#kBimrh%EDq?
z>P=>Y()aXosct0Y4Eb4i1h32M$a%g*<=W`}_BHHa0e~vbRJ*8h=
zTCsUXCr4>vcSsAr@ZsAxwX!*@AL(Uvb!j11@;bWe>bqXbczm6>5G|2KV!p*dyz=8`dO3KZhEH=v6k1bmzI|&{CmC8_3QUvNZrbJ
z62)~XmT_@T#(w>JR@!CCJFGj)wtk9@~lAbEO3i
z1F?yTJkNk4jn`KYo1NL|aGaA>Nbg$dT<4
z5fOrdg5Ehf!otLzv2N_z$$ax&uQCI#=`m$kKNz0UUgo%H6-R{RY$+i~@|?ur9EJo^O&=>j=qmGt%5
zac^VO(r8YcI5G13_ot2y7BMj~wTl-ma#OJ?nHga}e_q8BpFDRifUoB3*X{ZF`Qxjp
z#m}BGR8&+vLC2vja&7c++7uVN!baeDLVj4nid6b^cKUokRy*KCP=%v@GsgL-Em!=1N
zT*(9%78Yuo-&|n*7*id{AuR7tP0uT@tsSx4A0QC^@Zol|&U_mm*Ow>UxOEnADa=w*
zQf0FuqM{L-x9$-9{{4F`7H-Sz^UzQ+t;JWb4k&R2WiDTMalEo7AtR&V=&j!^$<*b7
zwE`u7KiwSpc513)XlUqBMn=X+9`5Uw2Hp2J4weg2JC1zgRFaqXbyT@>6mzS4W
z#eI63;?P%@4hx%9Q4dWIRMW_CTeYUrOP3@i-GA`-v1#;+7vzCQj~o#qZq(PB8pWEI
zl8)Sy(kM#!&fLe3M`mSZ^|383EDVJNM@QGX|DCRW^zh+X-^J8~gmU-wXXs$DPg_CYS*s4>Xlqw
z_%rb9quXM-VfX&iPXvGc`c;bq&1`CFS|+_?#|{;DclU(Aiztl){ry~8{%_wN$+7yu
z|N8CQhwYh0zJ@QcBgAgg$bF7_?4u~xeag73e>ldgzBWocqftOgM@OeffW>AvFEV%ZOBwltwcCF>Q>*U8pcHHC~i{{r#vn;Hv!YHrti#zG*%SJ{=MRn?*
zAHE#Ur<+g7zLSd4?q@+6YKxf8!pyH411YVaA8rXmX`VWDN-&9zic#G5XWR8Id~tGL
zHh&8Vt)GQXDZR&b@7}G-jD>p?78a&Lrtl}Gu&}Uq&xQ^zpe{8;K>+7Q_W}Nu>zC1i4LNxhjZ0x?WY<|7M
z11tM|+Irr^cz#va(AXY&YjHv^f_-(x3&(0WWH-LUbt^0J_o;dxoTtB9J~4FISYNB1
z>MLjcSp49@w&394{VRXFKDueXUX7Hx#h+u_b-c`E7cWE8`o&D;&r-^~S}l!@LCXR4
zug(NZnC2^HhKGby5`AE~FqFAR}PDj)9lSqu&fs}7Hh{OZnO
zY%q1#rxN9i`$UPcsW>C=4py;8byDt2_GQv?WyY6_t&bi(DvVuNbfeOz5?ked{!$Aq
zm^s#|Cm+$nkPr=hHi=HN5i%8KYt8Tq~i=5zki?4`)ZkN
zn00t^_IrvZm5dC^{-dCvpxR&eJ@nCEl~+%*ec8sD+HuVD$dMyV$8R1wesjc|Ros^H
zNx%n}X)YmQ;dTd+m6esucki~6q`lVnqGLw?Wq9Bxo)B~QZe_{a$)?0}(@WDPWhUr|
z;etk+3U7}3G&Nm9aqPvKDxW_e^8Rmszwy6z^0TWeE;;!@l(^mYC%>c|`nP=eGdSpH
z+f~SU;DDd-(d%7BDC9$r*RYq4N=@YOKTz;FW>Qt!-p;J3sJJxSAWOez506C9Q>F_S
zE-Wmk;cV>)=DFaXmd1DE#*N-Te;&Vj^@=-052tv~`uh5~=Vh}~bu~4c)r5=fSLQ}X
zT9S7fo0#LTyHxez0F{`~nNx6reR;UX3c);2al
zF)@KT<_+8VrDlJH85pnsT^1A-waNX7u3A5)iq3`|HEwd%tpU9;{Fn*F*RNk)OtG1a
z0sjP#9V^2Zvmb9e*4_5GwpIn_o0g1>EP4*zO(jBz9BqXmwdX0Pyx`3dH6~_eP9C1E
zI5h<~emyi?*UZp2s(Qqnl$6x_>RjR_UhV8H!shh~)lb;y+1MWA816?w47U4`uE%uZ
zwg~XZr`HF$x%=1GR*Pm@)Aa%tyWMEfW%2u^HDLnutgHbzfLA{_pSS-xO8f;A)8{k6
z$_KRaEO)woNsxBAvv+>n=>+dDC_1K;rK$J
z;g!<|t{-ccH8suo4T@_&Z1qoeU9;;cele?W!sNd^QzJlL!(eG~l$ZBfq4S@wHBv59
zhN?2MvaxI%g
zvx9+(@gT!C$BlIl{dEJ+WktaaTG_w*v^+2SR^Go)In@2pjb{D(hTOpD=wYolrZu4-
zTTQqadAB?5W)(JjWT+o!8wU8CW7xf7P>9aCW%m1%d#M7#!k2Hx2dLzq{17aq_ykxs_GMxGjty4ll74FY+=0WCBUJE*O}Vb?nlmOKodJ%^lMH
z;B1rAlHB@;S=hzG%*@Qk_09RHs&iu3FhARdTewQJdFmWWVbZ`
zxpovIMwNG&nI|W^Ke~2_vt9y`DA`z#>hc1hxF)kFN!vixnyvmzFptUXP+ig7)2DP1
zUx7kxZ~i%s{Zw|-)z#I-&5epZMQ6G+Bg
z_7k^bv6Lf?30ryj_>8Qq0zjYTR8>`{Zg+jSbq_`UO_a5U1|#~1FM6@#*X*pUJ1<_m
zxUOAiS{r_B?}-7u|Vy0&NLvOWqCc8KNwRobl=$)iDU^Z%yUR(8EW$il2>eQT+x4HEi9bFO&(BO
zTpaCmBuYr1K8blhPyR%d)``1SP1_xuo&D3(ZGBxUse#7Pp(lLzXTFZ+UpPR^?@o{pZIyIIyi&cpMDd+Qki
z{i0s-*C*?&>VEuqcgFO4TEfeh>{UloabDg>7a{Km7
ztHt+k-%1C+1W%W2tOeexLmQl_;a|UJ84Ze?UZA{@xC@$axlje}A8})5d|PafnLuyw@oDR}>SSBTzOEe0
zC|NgNjOutxDYDlvBs6rp=bhbFeQ6g$`Qx%f4+eCUCLg2e%4s{MT^RdSh&82cO-w8$
z@tXs_Z~k|+5sz)&&A)k%W@YQ2?&5z#`Ub_r@9tfr#fh$w<~M;Vri6?$+LTz-{&aqR
zo}Pihhr@G;4D2fUGbv#E))0{9+OPVxu+a^FuDuM%CG
zW+-`syzTSn`|qTyu??QSe97OoGW~k2DKWrs1vNp?xPr3G1gLhSa2z*kwu#xlEa7zE
zwIi$~+n(aO(ZYq}WyXMJzSVw(`^8#>G{blex-0dCz5Y($8)1?;CZ`v67i2sj|2Fr*
zgWF!$+-`W>_~Xa$XgcUm3Q0
ztE;PLn$@wSYUfZ07!)fgC~N`1o1PoJtZ@4Dz`~!-qL*ZM@7^r{l4az-`uU9JrAwax
zO0#bKI(yB`Z00MLwV&@IQOrQs`+_gXSTudi70GG{z(zLy7JJI4`q~;VmtU?ddX-$q
z&!6udquifBHiOhAVL@HqTg~BB0rnP^Y?fACS*a+v1|Ge%G!W=Yc0o%kd_-ZFoGA)s
zRG24#T-lkUXu>}Yr!)*8&Y)D;-?;H?`KJ!3<^3m5lz`}5sw=ps9qjF|&p1`wKcBu6
zSob*nV>*AMYui=HdM8UZhEg{)kD|E=7W~Gi<~S`vZP*#DFbqbltgKA8mv(Gy>}Z>%
z&SG9la`HCpH)t}BGf?S>U#>#yy_TL37spw6YqFkoaSuB?e{=XZoos0y++QZi8wZr0
z?EUikAP-LhB%~sa#EMquv_vR!edYH|mZtiwK`vSL?%nIcXa6|lJ7a}R0DzxAt;~{l
z7&{Q5ZqGBinT1%}Bp|ml)@H>S#Vgyx`1Kf02=MY!gBDvPTYeP7K`s+0#i7+Ic9(n@
z5YV0r5^da(YvGe-BZrSa%yjMV{11aRz<=}j;L_5Q`YC5j{%MdG!Ua#+N5A3K$k4Bg
zy7>!Q&(iOdj4iVPc?HEgK&`a2w5FO+#~*`tC^ZB=eE12A<$xm_k@4PZ!?Qcg+TW-b
zAVQ)wPjYfkl56^J6DA612z_}HjEs!^1R7QOb^oI{kmXN9s+Jh9^)FKVA}O|jv!1Je
z#2ar|nwp!NfV^vEU)#p>5#<#{sy}b;yScIPrky)?>fc`TUPd82#K&ionTk8JouW6}
zS=;tJdYjKc#@gCi-{|O<_df^)Xl=2_uI@LzoDMUJ##3ht+*}{McVJp%KR94Ae*!c9kGoZ98O{LKt>Ay
z#`tnI9|F;J&387P`B|pAIy#@ef6r?)Rr&q!;luvizeTEhT6EA;u=hUQ*}QcM8@Lx$
z$lup@Gy0*6E7T1^!&2`b#i3830!%e!=j8N_k3aI=O3Ni9^OB|?XPJ(U&fBhdnF0dP
z=@=Ogd#F0xb#zy?wC>{#i5p3~zBE9)SMtV|iHQjbAY_3I1+KDtC_XFVJca~q9@qqY
z6$lM<05@!Ee!dcbxEDMSfKOlF%F3#nf%m9p`mSgXF;UUokffHT%4r?IfR|QQ`aj*J
zYAg1TvbMGsH2u1(dy6Cl<=uN7k9)1V6GZ?VXk6DTJ|L36n;Svs9$DMxr5nrZC
zTSHUR1TdWF*^Ine-aVeHG#4*k9H$kcE(h|Uj}o(CC>mZl)dMNf$lChRd&lAamgLJW
zfZ67cY%X15a2{{F)7#stRC9YL*vft9*|qi6$@T^+T(g9Pgh=w9P0;Nu11j0JaoUVQ
zQTCxaWY?apDCi|8Cl@>;pp$z)4Dv}_`{V$C(xaCzUyjI)8+-M5EV5)4>_tSrt_ww+6!myvA!-~&RoH_
z*+P`i#%k?WH~s8u4-8+J*GGS;Nl8f9-@Jx96D{Kr8KivRyeBQ0Xh2C1^pnh==mla+
z5)ak@W2V1CZPiL}+NHaToh0ngub}FRW*hH{_RXBEe&qJmGiM&4#PvPrS&)V@C%(jl
zTPJuSM&{S^-OS8~!*2m16jlEMwDNHc+$+ho6uq>(ylqJK_S_)>JFsg)25WYNo>kq}
z(XpM~ZFwfqP!El2YaUUO)9`x(sOU85G(TPf*+rjl)3{ly#wRH$`4_t;o~nn+Y4a6S
zeW)Lbdxp{zp?2=%QH7$Q{W^Q>i6&b8oK*v*6uyE=jEvsvBK*laDyq{;?+qv10MLeN
z>;T1CAVzWBA4G5an!6C2kdV+D-aI7eIHWS(`HmJ{tBBez{gq3h&>)UkWMgNVEDXPNm&k
zq#+9Q)a-0I0LlXtpc_xl9AGFYEF}B_tt{iaBazO=RNromx6z~iwq+V^wqsMoZFQ}`FI0CQ4tY)XtVAM?dBOCFRBQ6
zptF;e=fX?tCY>NixmxdR+2AE`&q@Y!pZ5t2q@8q4w;HOAC~*Fxlf(b#Vh_H_Bh+*k
z7Z;I8%_AX1-7oOkkO9W*H0;*SG2=w15H_pzE^;539ZiO`%kP+NT)BPA)~zPvZCOHF
z_u&hMpKue?NYkl26Q+E?-r3oSW~pam{od}Q8dFasrKD<#{5jQx8E3F?_?o`8
z!@1;odU{(ZD2&Hi(~7iR5-%Nw4n@Cfmmj(am8ZUPVw3nvPADB0>$dXG67rik2h+eg
zs~Va^^4uN@$vCN61lPI
zGqkhmDn%V#UB?MGoTTwEb6oAUYu8{`q%>NwGBHiDk0oDz^9d_;vToNJIGa>_LPAhT
z2sy4(LQ2X6yoQFK#XwK*F~q8wCbzi}GF{zHrLij<;7l|$ionq9GVb@`77!)~WGfg+
zg5u)$^72HlUcIUi#!4bVjC0>uTP&JG-GyEppP5MqQd|z9DJV3Q0@tIZt!?!6`C-^L
zUcOF6j>9|bYQq7cuBSMf0IoR#;{85ot$>_9hH^kAe5lQ&i3{=@VV$*+?~HrC!q(#@Ihh4
zDI7>#ob2Ji){I}IXi=%yxqJ8B++30CmX`6S1KGd*_+cK{+1WX3)+#C{W@~?#QBHaF
zB*>9p(J9nOQypn3Y3aS_d_~L`alUw&1Vt0ap}bM$vv|yW;c0^o|3MbgG8*EhqzH$3
zpgY@K>)2_-X`5y(XxUN9tqlR4@9e1fPc*l*-`U1#$Nk&?EG4JiQz#wAt*P4BvH2rS
zOi<0jrCqaorzIVS?uUN7J#WdYSEz39U#$a8bkEgu=edFmp+=5-+S>B}U0Z8k^J*p!
zp_>_MFLD(gYKRF0%WssvbLURH$z#?P0w;4krsdk_N7rNt6?J-bvSeVf$LloqLSKLX
zCSX;p+rMNv*2_J{n(e_2+AGNrz{n?uJG?P}
z;`^Jlw8szvRCU(0uk}EAJmO>U@*u+*))s%db}Z~J3JQv;#l_S3EOaav*XJQ2|2~UD
zW-mU=@BMpM)|TgVP0y~2sS{VXd(WPn<|&wJav&LC2tsw2+Hh*Qu9=#0N=dOouKw24
zu|NVZsGeVp;_l=lv1h}}lDRAiNbQW4rC!vyA
z`*!5L1bA9nS|X8vPVQex(I6w?f-_BP7{z+95=O?xP25fgUbVt3br`N^gKZF7RJ0c_
z0rjxb)eOLOSU58%jdUL7d{y~tc$m=BD7S615bS|}>Hx^A@%Bn*+ebHXEHqUtx5N%w
z+N~tWuiLSn*2OR}J~cLGo&T*&Ng^Bu!k_w^nUI)xx2ULyv19@L{Vt4YlK11sG)j+I
zzW4vYU6`>=z_#f43^Lb#^5UseWJG!Z5)7%g>M^U!%AAF+Mj+j#3sFw0Q}%f{b)7lsC>0w^}(M!7%74(U!_>k*}Z!rZZX`u8kn>vR(Md
z$aQDXLsm4er)MojWI3@(_kfJ#W`p<=hN2S6e$)aSZR?)}^rW`w+cd7z{p1AUgA}(9
zXV}ux5-J0&S;I>jXmVl(a&nt?upQq*QoC}c5)OB}$yQqS3gj-xNI=!bx~BJ)fXnA>A0v^%dzkiLzM
z_%$|GL!w&?xPRXecdKrq;pK@a$Mpzdb0+9dWsXq42`5s_&eKz7zkomk`-QV-jhXz7
z2s;jrlGs{Dp4GS{5SU3bI#}K7)zwvDoW}V1`p=&YXK|#3@Q=?joX2pu$~PuPKTH;z
z1a@|GWRIePMms`(=#;*&iSxYrqKEp19dtRugEx=yXzg`#Lq}6VOV>4%lk*u_-9m!x
z{TZ2~zt~DNp(&}UwV|%yUHW>&MWQ=&4^!hPHZdUp^eV){((+SxH~Y42+dhB!LPjF8
z6ScL}C(l#GhEGk|*SeRE)Jj9gCMOBu0e2+O=HpZ41B5k6B1jreg?R(<5+K%Z$(MN`NtQJ<
z1o9o_^;=zdm0MKx5xqN=7XHudg8^?KwPvr>)e1hdB9=n(`#}hOsf1
zcjV$pRCltLB3dhLU0p)zfKhiB`3^!#LRU}7&D{mlyDi6@wv)>RZwPorA_4pm_#ebz
zKduVi9Bd%6eSah3kTgN7`)7CJt-IqD1JtlRN$7Q(an|nwsQg_l*|6z5eVcO3~c|q$>78hw+RXA#g6_wc(z2PossE&F0(n)W6hRCA^{tSudHWi9dhpqy$7o
zLvm#C&BZpJ9X#iBx!mfDZmBY4$lKc;|@YA
zgeg`>gg$Ih@p3v5Zy~TN3|d6zWQmASSy|kfA0=*!{2%@d4OO`s@ayJNgZO#9=;T6G
z-a*t+=U4euEF|Q~9yrz_Rg)6~{0y!R{45VwDVAHS$i8nA0zLG5
z_wusvnwgqrb;3%p%Y5QAi<8SGBBCy6;OZ)g>h%qHgQ8~ts}qJy6ht!PpFmg)`_UOZ
z_g4Yl1~Mv*zY!gLTh#2oD`OcXZ&c5Ih+EMQ5?C&E&a;y2W+GPz!!&drW_6bA4$!_-
zgOcLMRtlfT&*@%CX!S{7k=B+U02%aU?K&L-~SedZhhaM3}J
z!i!x+PqK$YX5Cd7^5Wq}pzONg?C9^`H*`oRq^0d)){;u0O_Q~#NCSM{BV;FZO9}TS
zL8)W@5IICdMA~MzQZsqO-ynIvdnZnK`#5`<)w44*u>e{iFyIeBcj#{F>VA1vKVT0%
zapXXG#j-p21~1b!y{xFN&gn!DZfP+1LYqfc>pYC=q?DBMt}ZsnVAdHdGDCEw3~97Z7`fX{o}Y?DhXW%c^`;J-RW^YZXAeu%*=z7~5D~jn){Q3?@*0p}
z!Oc;IPSZNPFREQNfnR>N92V<=1|mtO)5V{Nrb#Nz-`l#5c;$g`4wB5;+~vP8#X;9k
z0#uBTk7pW|ZDL|&B{V1kGZ5j8k+HD>sNZF%xP;w?q$V6f3IY{EOag{LlE&ljq}N6{
zFnu64i};4Gf-);Wsrfr$Vc{%`W^U@e5_B>$GE)l+jMBr{hn35-!^fb|-5hJBfk=rA
z!(c7{Rn~DbLvs}hZ>a4?KvdsaTZt7Qz%sNp!bv5r65clj4T~QHfj+zm5P(8Xk1&By
zI0%HYAGdR9D9SF=VL*u}zWerhvw3M*A+I`a+?R)A9hZ_)Ga9MEdH~F2Cwk-fu62^j
zIUQh!UYLA@e0%oXxuD=+Uz|y**2Yht2ntcUmBZZ|RRt*r8c@4c&BgPdqv~-GHd9a=
zh9xJzP(KU7;%9+_b)feO*Z%$Vkgi-%3Ya+Dr^r6YB9=D(^Zia(4Ul=Er`JdHgVq8%k=|)A##WU0<_>8BTb1^2N=#I3_~^}h%gd2
z(MB}cNBH@bEG>`Vf{hFfN%HdLKaT9@o=2Cg8K?WuP2m^(&H&hEBdv&frlk2Pa#ZfQ{m
z4>^U%ESr=w5o9Jbq2>6_k8Zc%c@PKOWnrATlQnk2yaHl*W8%3zga`+hg24Kks_Duov|Ln35u#+M1h@pX2Ra>$z@jeh;tQoHWX251oU6
z)4-4>!&?c7X9tH&ZMxJ|&6_txWL8G@FPzqeAg2;8c!zC*6N$g=z}giABNaZd*&Ce<
zK?35OG)Y{XF}vP;SBl_8P5r19*Iy`d!D?LcnZ1qH{%o`;MKePPnT_+7u15Hv54RH@nrvHp
z!QE)7TRRXsHCg=NG)94Uz!i`|5%ELYAQ7z|a_gXq%oR->5_G0UblJI)#?2dlXK6cy
zbddZ;eKbK?v0g`X#33|CNK~{Ekqdy)J19YMZ{MDsI*#P!65=WC9snD>TA3s;8z6f*
zYir*5P5bOZ^PgxCT(l`W$uvl$ax9k@*_R;4C+HKyOOc{h64m?n?`QTm3dfFAIuepS
z3IeDCtH7-rB(KuSDWx;}x}9CaYhV*WWPir9K+vnIs{EU8YrS*IvaR7F4f)c_7~*yS
z^M@m6RiE{b9VwnZ?fAqAfaA;8uf~BKGVbAyMYc7@W@g;O;TahMlUb>6-x|M^_39om
zQB}5zB?JY|LB2PyUstKRZ?-qrKKM!!)Hu5nAOkhEw|2`_uclBWDz<_oC;@OoplP3D
z7B(xbsPOCJKw2O1q6d(srqd%{ym*Xcp>q!c?C9jO_L
zJ`e6jgBn4C|3ttnDd%H{4?n1b;`mu|5nst0A>$7vIB3>wnPl(Zzb_g?!1R=^Zj|1-
z8Au3|w2L4P=2l=bSSPVa)JFeGrnERm7_AVhBoP}|-E&+nQn$kiG0&cD
zB1K0O+=;Y(HSaXmdR|b=9kdj8ZjnRU#T#;t_-(y7!;1z69OyaG@Zd$ov{GL@-9Z92
zV@=ILl|s(x2ovunQ9Z4at
zB8>;Nz;kV0lc;Wdh`c||ao@#hbE?CI@t^)OlYUlN*&7M$UIV<4WC)SkdL5}qc=@`S
zsfam2yztRG*Y@Sh17ZKxA3ydWU~~%YSx87I^LiuK;P5b2Xd;|uO-)Vbo}L~Kob4ia
z*y7-FONfj|dd_Yl(uEd!(xCA#rCmQwc+J*{kEdqJf$CT1haN%Xud0fI;A-!BJZrv$
zg@(5B&L14?c`E26<+hW!#;3PBpgLp%VMNRzSIDxl=(Tb0?_c*hlr>>z2e2w)Cw<_p
zKsTpnVcG6)q^6^@oj|(;=p&4N)%TZ@pTAgAx_B{&hW}2a!xQvYk~icb3k-?3MIE&W#Qx;2{BlYUuruWBCeyU`@dfwa#4r{rxENm%B;uF1-Oe8Ygm2
z)>Vk*>8aj*#45f6fT~W{LQa1(5n&8muZv)fkLN?AA{+pOboxL$T&8--
zh>3}$BuaUCd7|1P17D78L7RqRtQmC=@bxi^rUP&dSy1l;#l)&W-HyQ!!~Zf}e+>>|
z)}k)C{O|JYF(~)M5rNiR4OVs$EExy(=EP5CB#D`jpH~WGuamTcMlr7P8kMKW&C$t8
z5w?kUq()UCq3dBX$HmpP4{!3hq2V617ziwnVSF1QgEoGHWxiU*6Z?&F`*u0ZwLA+B
zMkJROB?~y4fTcNRb)UeW6{}Sknj(`}kNi^^E$Fd#gwEf*tfoc+9n!z;?kVF=->l72#~-3?`;DDTiV*PY)|o;~Fz1f$f{)V4L027-2W{b+49d()Br
z_N^SO1~(PpGnhO7$Qp?Tc#^z>|Kq#$_6xCxRBLL{9GOq$^fH_cwBK{Hx%5y)o
zGfsZ%g6tb~4&bBAYGhYqQRgQRO3b``=Z64dd32zlKEE{7)$Lm&FKKEHtJu7J@uKd@
zFCwk{6;^QOg>0%rD?Yu?VdZdJ6dJqjbFwpT2&5nB(#5>u$uCi2)kK
zJx(F}@eOB+kdlyQCU6`<#Q;DOP-vt7z_urZGD1Vd8&IH$&i(1!gRMX;BY+MSBJN-%
z+eb*C*kG`cep$l};{dm`cXTYrFG)USJP!%IZ7e%Vb>gjTYxWH{CDPDy-OvSctLx5
zXSBY!+LqGw4b{(4_jMSzS@-~55ZU^)lvDc6;0L`UBgzKbSqV^vgM~$x2RFt|dJ2V>
zn7HUfS;OXaOUQ?Fi$kaQ4&y@mf|R?HY+{F~lG>c1r7-!sCgi82q{OAB@)qh{ym$wI
zO59Qk`4K2{TA7BYqCO6HJ3%KJr@ccHf$0x46{VOyzg#YKdJ7-mF05cCaYdJ*PGJ9?
zGZ0}REMnNQ_0Q-0iqcT?2*tvAoW;U}y1W$1Cua8y-TYdBRs}F}!U(bZjf1;it`Mv?
z<(-&|$#dHMxddNg>xxIJ1Dej9M9?iIV1fRDfx}wX^4L#CMn({oYLBr*G%vQ@wmSxbW&ux%-qX1@g)})dJ3~D)E(PBWw5O
zWKfZ?<%c++u0Fzlh>Xp9)6ZRZ4rvkY(@)9P4#{;N{O5R8U`U42)m*J6-Ws*iHB3z$
zE)o4{q>n9pFngGvzKN6XNnzZxTigCMG>4XKW#ygUnwbBv^1a|>#Xb37?}IB4uUdF)
zmJ>pQ7f&+$Gbj6r5`6w-nbN9KS@Hk(8DJD5WKIoMJ%`%DXg=0|`QTTG>%A{QEZruZ
z;|U(kt*x&Ug|D6LQv3gY=JU=}tOe7U1W!ewv(dN*c3}kjGwt^I-~LBfVfsc=-v9UY
zoe>R4OF{Fq+xu@ryo)nE1}IQpUym(q*?b$h5=NM2;m4gUQ}luh