diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/main.nf b/subworkflows/nf-core/fastq_align_dedup_bwamem/main.nf old mode 100644 new mode 100755 index a496e1e3b554..7c29b43e84d3 --- a/subworkflows/nf-core/fastq_align_dedup_bwamem/main.nf +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/main.nf @@ -1,6 +1,8 @@ -include { FASTQ_ALIGN_BWA } from '../fastq_align_bwa/main' +include { BAM_SORT_STATS_SAMTOOLS } from '../../nf-core/bam_sort_stats_samtools/main' +include { FASTQ_ALIGN_BWA } from '../../nf-core/fastq_align_bwa/main' include { PICARD_ADDORREPLACEREADGROUPS } from '../../../modules/nf-core/picard/addorreplacereadgroups/main' include { PICARD_MARKDUPLICATES } from '../../../modules/nf-core/picard/markduplicates/main' +include { PARABRICKS_FQ2BAM } from '../../../modules/nf-core/parabricks/fq2bam/main' include { SAMTOOLS_INDEX } from '../../../modules/nf-core/samtools/index/main' workflow FASTQ_ALIGN_DEDUP_BWAMEM { @@ -12,6 +14,8 @@ workflow FASTQ_ALIGN_DEDUP_BWAMEM { ch_bwamem_index // channel: [ val(meta), [ bwam index ] ] skip_deduplication // boolean: whether to deduplicate alignments use_gpu // boolean: whether to use GPU or CPU for bwamem alignment + interval_file // channel: [ val(meta), [ interval file ] ] + known_sites // channel: [ val(meta), [ known sites ] ] main: @@ -23,18 +27,46 @@ workflow FASTQ_ALIGN_DEDUP_BWAMEM { ch_multiqc_files = Channel.empty() ch_versions = Channel.empty() - FASTQ_ALIGN_BWA ( - ch_reads, - ch_bwamem_index, - true, // val_sort_bam hardcoded to true - ch_fasta - ) - ch_alignment = ch_alignment.mix(FASTQ_ALIGN_BWA.out.bam) - ch_alignment_index = ch_alignment.mix(FASTQ_ALIGN_BWA.out.bai) - ch_stats = ch_alignment.mix(FASTQ_ALIGN_BWA.out.stats) // channel: [ val(meta), path(stats) ] - ch_flagstat = ch_alignment.mix(FASTQ_ALIGN_BWA.out.flagstat) // channel: [ val(meta), path(flagstat) ] - ch_idxstats = ch_alignment.mix(FASTQ_ALIGN_BWA.out.idxstats) // channel: [ val(meta), path(idxstats) ] - ch_versions = ch_versions.mix(FASTQ_ALIGN_BWA.out.versions.first()) + if (use_gpu) { + /* + * Align with parabricks GPU enabled fq2bammeth implementation of bwameth + */ + PARABRICKS_FQ2BAM ( + ch_reads, + ch_fasta, + ch_bwamem_index, + interval_file, // interval file + known_sites, // known sites + 'bam' // output format + ) + ch_alignment = PARABRICKS_FQ2BAM.out.bam + ch_versions = ch_versions.mix(PARABRICKS_FQ2BAM.out.versions.first()) + + BAM_SORT_STATS_SAMTOOLS ( + ch_alignment, + ch_fasta + ) + ch_alignment = BAM_SORT_STATS_SAMTOOLS.out.bam + ch_alignment_index = BAM_SORT_STATS_SAMTOOLS.out.bai + ch_stats = BAM_SORT_STATS_SAMTOOLS.out.stats // channel: [ val(meta), path(stats) ] + ch_flagstat = BAM_SORT_STATS_SAMTOOLS.out.flagstat // channel: [ val(meta), path(flagstat) ] + ch_idxstats = BAM_SORT_STATS_SAMTOOLS.out.idxstats // channel: [ val(meta), path(idxstats) ] + ch_versions = ch_versions.mix(BAM_SORT_STATS_SAMTOOLS.out.versions.first()) + } + else { + FASTQ_ALIGN_BWA ( + ch_reads, + ch_bwamem_index, + true, // val_sort_bam hardcoded to true + ch_fasta + ) + ch_alignment = ch_alignment.mix(FASTQ_ALIGN_BWA.out.bam) + ch_alignment_index = ch_alignment.mix(FASTQ_ALIGN_BWA.out.bai) + ch_stats = ch_alignment.mix(FASTQ_ALIGN_BWA.out.stats) // channel: [ val(meta), path(stats) ] + ch_flagstat = ch_alignment.mix(FASTQ_ALIGN_BWA.out.flagstat) // channel: [ val(meta), path(flagstat) ] + ch_idxstats = ch_alignment.mix(FASTQ_ALIGN_BWA.out.idxstats) // channel: [ val(meta), path(idxstats) ] + ch_versions = ch_versions.mix(FASTQ_ALIGN_BWA.out.versions.first()) + } if (!skip_deduplication) { /* diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/meta.yml b/subworkflows/nf-core/fastq_align_dedup_bwamem/meta.yml old mode 100644 new mode 100755 index 359f2db66b01..cff5cf736ec9 --- a/subworkflows/nf-core/fastq_align_dedup_bwamem/meta.yml +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/meta.yml @@ -1,6 +1,6 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json name: "fastq_align_dedup_bwamem" -description: Performs alignment of DNA or TAPS-treated reads using bwamem, sort and deduplicate +description: Performs alignment of DNA or TAPS-treated reads using bwamem or parabricks/fq2bam, sort and deduplicate keywords: - bwamem - alignment @@ -11,9 +11,11 @@ keywords: - fastq - bam components: + - parabricks/fq2bam - samtools/index - picard/addorreplacereadgroups - picard/markduplicates + - bam_sort_stats_samtools - fastq_align_bwa input: - ch_reads: @@ -41,6 +43,20 @@ input: type: boolean description: | Skip deduplication of aligned reads + - use_gpu: + type: boolean + description: | + Use GPU for alignment + - interval_file: + type: file + description: | + Structure: [ val(meta), path(interval file) ] + pattern: "*.{bed,intervals}" + - known_sites: + type: file + description: | + Structure: [ val(meta), path(known sites) ] + pattern: "*.{vcf,vcf.gz}" output: - bam: type: file diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/nextflow.config b/subworkflows/nf-core/fastq_align_dedup_bwamem/nextflow.config old mode 100644 new mode 100755 index bc1fcf151503..441288760beb --- a/subworkflows/nf-core/fastq_align_dedup_bwamem/nextflow.config +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/nextflow.config @@ -1,4 +1,3 @@ -// IMPORTANT: This config file should be included to ensure that the subworkflow works properly. process { withName: 'SAMTOOLS_SORT' { ext.prefix = { "${meta.id}.sorted" } diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/gpu.nf.test b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/gpu.nf.test new file mode 100755 index 000000000000..218534706d6f --- /dev/null +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/gpu.nf.test @@ -0,0 +1,224 @@ +nextflow_workflow { + + name "Test Subworkflow FASTQ_ALIGN_DEDUP_BWAMEM" + script "../main.nf" + workflow "FASTQ_ALIGN_DEDUP_BWAMEM" + config "./nextflow.config" + + tag "gpu" + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_align_dedup_bwamem" + tag "parabricks/fq2bam" + tag "samtools/index" + tag "picard/markduplicates" + tag "untar" + + setup { + run("BWA_INDEX") { + script "../../../../modules/nf-core/bwa/index/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file('https://github.com/nf-core/test-datasets/raw/methylseq/reference/genome.fa', checkIfExists: true) + ]) + """ + } + } + + run("BWA_INDEX", alias: 'BWA_INDEX_PE') { + script "../../../../modules/nf-core/bwa/index/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test' ], // meta map + file('https://github.com/nf-core/test-datasets/raw/methylseq/reference/genome.fa', checkIfExists: true) + ]) + """ + } + } + } + + test("Params: parabricks/fq2bam single-end | use_gpu ") { + when { + params { + use_gpu = true + bwa_prefix = 'genome.fa' + } + workflow { + """ + 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) + ]) + input[1] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[3] = BWA_INDEX.out.index + input[4] = false // skip_deduplication + input[5] = true // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.bam.collect { meta, bamfile -> bam(bamfile).getReadsMD5() }, + workflow.out.bai.collect { meta, bai -> file(bai).name }, + workflow.out.samtools_flagstat, + workflow.out.samtools_stats, + workflow.out.samtools_index_stats, + workflow.out.picard_metrics.collect { meta, metrics -> file(metrics).name }, + workflow.out.multiqc.flatten().collect { path -> file(path).name }, + workflow.out.versions + ).match() + } + ) + } + } + + test("Params: parabricks/fq2bam single-end | use_gpu | skip_deduplication") { + when { + params { + skip_deduplication = true + use_gpu = true + bwa_prefix = 'genome.fa' + } + workflow { + """ + 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) + ]) + input[1] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[3] = BWA_INDEX.out.index + input[4] = true // skip_deduplication + input[5] = true // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.bam.collect { meta, bamfile -> bam(bamfile).getReadsMD5() }, + workflow.out.bai.collect { meta, bai -> file(bai).name }, + workflow.out.samtools_flagstat, + workflow.out.samtools_stats, + workflow.out.samtools_index_stats, + workflow.out.picard_metrics.collect { meta, metrics -> file(metrics).name }, + workflow.out.multiqc.flatten().collect { path -> file(path).name }, + workflow.out.versions + ).match() + } + ) + } + } + + test("Params: parabricks/fq2bam single-end | use_gpu | stub") { + options '-stub' + when { + + workflow { + """ + 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) + ]) + input[1] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[3] = BWA_INDEX.out.index + input[4] = false // skip_deduplication + input[5] = true // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + + test("Params: parabricks/fq2bam paired-end | use_gpu | skip_deduplication") { + + when { + params { + skip_deduplication = true + use_gpu = true + bwa_prefix = 'genome.fa' + } + workflow { + """ + input[0] = Channel.of([ + [ id:'test', single_end:false ], + [ + 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) + ] + ]) + input[1] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + ]) + input[2] = Channel.of([ + [:], + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) + ]) + input[3] = BWA_INDEX_PE.out.index + input[4] = true // skip_deduplication + input[5] = true // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.bam.collect { meta, bamfile -> bam(bamfile).getReadsMD5() }, + workflow.out.bai.collect { meta, bai -> file(bai).name }, + workflow.out.samtools_flagstat, + workflow.out.samtools_stats, + workflow.out.samtools_index_stats, + workflow.out.picard_metrics.collect { meta, metrics -> file(metrics).name }, + workflow.out.multiqc.flatten().collect { path -> file(path).name }, + workflow.out.versions + ).match() + } + ) + } + } +} diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/gpu.nf.test.snap b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/gpu.nf.test.snap new file mode 100644 index 000000000000..8c85b6b0f6a7 --- /dev/null +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/gpu.nf.test.snap @@ -0,0 +1,160 @@ +{ + "Params: parabricks/fq2bam single-end | use_gpu | stub": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "2": [ + + ], + "3": [ + + ], + "4": [ + + ], + "5": [ + + ], + "6": [ + + ], + "7": [ + + ], + "bai": [ + + ], + "bam": [ + + ], + "multiqc": [ + + ], + "picard_metrics": [ + + ], + "samtools_flagstat": [ + + ], + "samtools_index_stats": [ + + ], + "samtools_stats": [ + + ], + "versions": [ + + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.7" + }, + "timestamp": "2025-10-31T15:58:31.925828509" + }, + "Params: parabricks/fq2bam single-end | use_gpu ": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.7" + }, + "timestamp": "2025-10-31T15:58:17.076913842" + }, + "Params: parabricks/fq2bam paired-end | use_gpu | skip_deduplication": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.7" + }, + "timestamp": "2025-10-31T15:58:39.347884795" + }, + "Params: parabricks/fq2bam single-end | use_gpu | skip_deduplication": { + "content": [ + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ], + [ + + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.04.7" + }, + "timestamp": "2025-10-31T15:58:24.519410831" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test old mode 100644 new mode 100755 index be79feed6178..5b9ee22da81f --- a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test @@ -8,15 +8,12 @@ nextflow_workflow { tag "subworkflows" tag "subworkflows_nfcore" tag "subworkflows/fastq_align_dedup_bwamem" - tag "subworkflows/fastq_align_bwa" tag "bwa/index" - tag "bwa/mem" - tag "samtools" + tag "parabricks/fq2bam" tag "samtools/sort" tag "samtools/index" tag "samtools/flagstat" tag "samtools/stats" - tag "samtools/idxstats" tag "bam_sort_stats_samtools" tag "fastq_align_bwa" tag "picard/markduplicates" @@ -28,10 +25,9 @@ nextflow_workflow { script "../../../../modules/nf-core/bwa/index/main.nf" process { """ - input[0] = [ - [ id:'genome' ], + input[0] = Channel.value([ [ id:'genome' ], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) - ] + ]) """ } } @@ -58,6 +54,8 @@ nextflow_workflow { input[3] = BWA_INDEX.out.index input[4] = false // skip_deduplication input[5] = false // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites """ } } @@ -101,12 +99,15 @@ nextflow_workflow { input[3] = BWA_INDEX.out.index input[4] = false // skip_deduplication input[5] = false // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites """ } } then { assertAll( + { assert workflow.success }, { assert workflow.success }, { assert snapshot( workflow.out.bam.collect { meta, bamfile -> bam(bamfile).getReadsMD5() }, @@ -144,12 +145,15 @@ nextflow_workflow { input[3] = BWA_INDEX.out.index input[4] = true // skip_deduplication input[5] = false // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites """ } } then { assertAll( + { assert workflow.success }, { assert workflow.success }, { assert snapshot( workflow.out.bam.collect { meta, bamfile -> bam(bamfile).getReadsMD5() }, @@ -186,6 +190,8 @@ nextflow_workflow { input[3] = BWA_INDEX.out.index input[4] = false // skip_deduplication input[5] = false // use_gpu + input[6] = Channel.empty() // interval_file + input[7] = Channel.empty() // known_sites """ } } @@ -193,10 +199,16 @@ nextflow_workflow { then { assertAll( { assert workflow.success }, - { assert snapshot( - workflow.out, - workflow.out.versions.collect{ path(it).yaml } - ).match() } + { assert snapshot( + workflow.out.bam.collect { meta, bamfile -> bam(bamfile).getReadsMD5() }, + workflow.out.bai.collect { meta, bai -> file(bai).name }, + workflow.out.samtools_flagstat, + workflow.out.samtools_stats, + workflow.out.samtools_index_stats, + workflow.out.picard_metrics.collect { meta, metrics -> file(metrics).name }, + workflow.out.multiqc.flatten().collect { path -> file(path).name }, + workflow.out.versions + ).match() } ) } } diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test.snap index 214e37f4d4d3..ae1573a72264 100644 --- a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test.snap +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/main.nf.test.snap @@ -78,7 +78,7 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-10-24T15:06:49.6951852" + "timestamp": "2025-10-31T15:27:53.091677319" }, "Params: bwamem paired-end - skip_deduplication": { "content": [ @@ -156,237 +156,88 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-10-24T15:07:14.224268922" + "timestamp": "2025-10-31T15:28:18.193321062" }, "Params: bwamem single-end - default - stub": { "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": true - }, - "test.deduped.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test", - "single_end": true - }, - "test.deduped.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "2": [ - [ - { - "id": "test", - "single_end": true - }, - "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" - ], - [ - { - "id": "test", - "single_end": true - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test", - "single_end": true - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "single_end": true - }, - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test", - "single_end": true - }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "single_end": true - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "5": [ - [ - { - "id": "test", - "single_end": true - }, - "test.deduped.sorted.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - "test.deduped.sorted.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" - ], - [ - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - "versions.yml:md5,6fa0c192669339220d5c5735739188ac", - "versions.yml:md5,8f2ff4c430c4c5f42631534eaf358833", - "versions.yml:md5,c8ad9ea35566f100e41588f4c271b663", - "versions.yml:md5,e0c30eb274e33f3086ff9e694aae2161" - ], - "bai": [ - [ - { - "id": "test", - "single_end": true - }, - "test.deduped.sorted.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "bam": [ - [ - { - "id": "test", - "single_end": true - }, - "test.deduped.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "multiqc": [ - [ - "test.deduped.sorted.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" - ], - [ - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e", - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "picard_metrics": [ - [ - { - "id": "test", - "single_end": true - }, - "test.deduped.sorted.MarkDuplicates.metrics.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "samtools_flagstat": [ - [ - { - "id": "test", - "single_end": true - }, - "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" - ], - [ - { - "id": "test", - "single_end": true - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + [ + "d41d8cd98f00b204e9800998ecf8427e" + ], + [ + "test.deduped.sorted.bam.bai" + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" ], - "samtools_index_stats": [ - [ - { - "id": "test", - "single_end": true - }, - "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "single_end": true - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ], - "samtools_stats": [ - [ - { - "id": "test", - "single_end": true - }, - "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ], - [ - { - "id": "test", - "single_end": true - }, - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] + [ + { + "id": "test", + "single_end": true + }, + "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + [ + [ + { + "id": "test", + "single_end": true + }, + "test.idxstats:md5,d41d8cd98f00b204e9800998ecf8427e" ], - "versions": [ - "versions.yml:md5,6fa0c192669339220d5c5735739188ac", - "versions.yml:md5,8f2ff4c430c4c5f42631534eaf358833", - "versions.yml:md5,c8ad9ea35566f100e41588f4c271b663", - "versions.yml:md5,e0c30eb274e33f3086ff9e694aae2161" + [ + { + "id": "test", + "single_end": true + }, + "test.sorted.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] - }, - [ - { - "FASTQ_ALIGN_DEDUP_BWAMEM:PICARD_MARKDUPLICATES": { - "picard": "3.4.0" - } - }, - { - "FASTQ_ALIGN_DEDUP_BWAMEM:FASTQ_ALIGN_BWA:BWA_MEM": { - "bwa": "0.7.19-r1273", - "samtools": "1.22.1" - } - }, - { - "FASTQ_ALIGN_DEDUP_BWAMEM:SAMTOOLS_INDEX": { - "samtools": "1.22.1" - } - }, - { - "FASTQ_ALIGN_DEDUP_BWAMEM:PICARD_ADDORREPLACEREADGROUPS": { - "picard": "3.4.0" - } - } + ], + [ + "test.deduped.sorted.MarkDuplicates.metrics.txt" + ], + [ + "test.deduped.sorted.MarkDuplicates.metrics.txt", + "test.sorted.bam", + "test.flagstat", + "test.sorted.bam", + "test.idxstats", + "test.sorted.bam", + "test.stats" + ], + [ + "versions.yml:md5,6fa0c192669339220d5c5735739188ac", + "versions.yml:md5,8f2ff4c430c4c5f42631534eaf358833", + "versions.yml:md5,c8ad9ea35566f100e41588f4c271b663", + "versions.yml:md5,e0c30eb274e33f3086ff9e694aae2161" ] ], "meta": { "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-10-24T15:07:27.497220186" + "timestamp": "2025-10-31T15:28:31.607014969" }, "Params: bwamem paired-end - default": { "content": [ @@ -467,6 +318,6 @@ "nf-test": "0.9.2", "nextflow": "24.10.5" }, - "timestamp": "2025-10-24T15:07:05.175157122" + "timestamp": "2025-10-31T15:28:08.721629597" } } \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/nextflow.config b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/nextflow.config old mode 100644 new mode 100755 index 755ba1b3feed..bb05b1ae6943 --- a/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/nextflow.config +++ b/subworkflows/nf-core/fastq_align_dedup_bwamem/tests/nextflow.config @@ -1,4 +1,8 @@ process { + withName: 'PARABRICKS_FQ2BAM' { + ext.args = '--low-memory' + containerOptions = '--gpus all --memory=64g --memory-swap=64g' + } withName: 'SAMTOOLS_SORT' { ext.prefix = { "${meta.id}.sorted" } } diff --git a/subworkflows/nf-core/fastq_align_dedup_bwameth/tests/nextflow.config b/subworkflows/nf-core/fastq_align_dedup_bwameth/tests/nextflow.config index 55385ec0621e..621348c4b8ae 100644 --- a/subworkflows/nf-core/fastq_align_dedup_bwameth/tests/nextflow.config +++ b/subworkflows/nf-core/fastq_align_dedup_bwameth/tests/nextflow.config @@ -11,4 +11,4 @@ process { ext.args = "--ASSUME_SORTED true --REMOVE_DUPLICATES false --VALIDATION_STRINGENCY LENIENT --PROGRAM_RECORD_ID 'null' --TMP_DIR tmp" ext.prefix = { "${meta.id}.markdup.sorted" } } -} +} \ No newline at end of file