diff --git a/setup-nextflow b/setup-nextflow deleted file mode 160000 index 6c2e22b4d901..000000000000 --- a/setup-nextflow +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6c2e22b4d901f0c42ca66c5069f8026df026d165 diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/main.nf b/subworkflows/nf-core/fastq_removeadapters_merge/main.nf new file mode 100644 index 000000000000..70d37e0c3b5f --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/main.nf @@ -0,0 +1,128 @@ +// both SE and PE +include { TRIMMOMATIC } from '../../../modules/nf-core/trimmomatic/main' +include { CUTADAPT } from '../../../modules/nf-core/cutadapt/main' +include { TRIMGALORE } from '../../../modules/nf-core/trimgalore/main' +include { BBMAP_BBDUK } from '../../../modules/nf-core/bbmap/bbduk/main' +include { LEEHOM } from '../../../modules/nf-core/leehom/main' +// both SE and PE, plus merging +include { FASTP } from '../../../modules/nf-core/fastp/main' +include { ADAPTERREMOVAL as ADAPTERREMOVAL_SE } from '../../../modules/nf-core/adapterremoval/main' +include { ADAPTERREMOVAL as ADAPTERREMOVAL_PE } from '../../../modules/nf-core/adapterremoval/main' + +workflow FASTQ_REMOVEADAPTERS_MERGE { + + take: + ch_input_reads // channel: [mandatory] meta, reads + val_adapter_tool // string: [mandatory] tool_name // choose from: ["trimmomatic", "cutadapt", "trimgalore", "bbduk", "leehom", "fastp", "adapterremoval"] + ch_adapters // channel: [optional] {fasta,txt} // fasta, for bbduk or fastp, or txt, for adapterremoval + val_save_merged // boolean: [mandatory] if true, will return the merged reads instead, for fastp and adapterremoval + val_fastp_discard_trimmed_pass // boolean: [mandatory] // only for fastp + val_fastp_save_trimmed_fail // boolean: [mandatory] // only for fastp + + main: + + ch_discarded_reads = channel.empty() // from trimmomatic, trimgalore, leehom, fastp, adapterremoval + ch_paired_interleaved = channel.empty() // from adapterremoval + ch_log = channel.empty() // from trimmomatic, trimgalore, fastp + ch_report = channel.empty() // from trimmomatic, trimgalore, fastp + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() // from trimmomatic, cutadapt, bbduk, leehom, fastp, adapterremoval + + if (val_adapter_tool == "trimmomatic") { + TRIMMOMATIC( ch_input_reads ) + + ch_processed_reads = TRIMMOMATIC.out.trimmed_reads + ch_discarded_reads = ch_discarded_reads.mix(TRIMMOMATIC.out.unpaired_reads.transpose()) // .transpose() because paired reads have 2 unpaired files in an array + ch_log = TRIMMOMATIC.out.trim_log + ch_report = TRIMMOMATIC.out.summary + ch_versions = ch_versions.mix(TRIMMOMATIC.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(TRIMMOMATIC.out.out_log) + } else if (val_adapter_tool == "cutadapt") { + CUTADAPT( ch_input_reads ) + + ch_processed_reads = CUTADAPT.out.reads + ch_multiqc_files = ch_multiqc_files.mix(CUTADAPT.out.log) + } else if (val_adapter_tool == "trimgalore") { + TRIMGALORE( ch_input_reads ) + + ch_processed_reads = TRIMGALORE.out.reads + ch_discarded_reads = ch_discarded_reads.mix(TRIMGALORE.out.unpaired) + ch_log = TRIMGALORE.out.log + ch_report = TRIMGALORE.out.html.mix(TRIMGALORE.out.zip) + } else if (val_adapter_tool == "bbduk") { + BBMAP_BBDUK( ch_input_reads, ch_adapters ) + + ch_processed_reads = BBMAP_BBDUK.out.reads + ch_versions = ch_versions.mix(BBMAP_BBDUK.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(BBMAP_BBDUK.out.log) + } else if (val_adapter_tool == "leehom") { + LEEHOM( ch_input_reads ) + + ch_processed_reads = LEEHOM.out.fq_pass + .join(LEEHOM.out.unmerged_r1_fq_pass, by: 0, remainder: true) + .join(LEEHOM.out.unmerged_r2_fq_pass, by: 0, remainder: true) + .map { meta, single, r1, r2 -> + if (meta.single_end) { + return [meta, single] + } else { + return [meta, [r1, r2]] + } + } + ch_discarded_reads = ch_discarded_reads.mix(LEEHOM.out.fq_fail, LEEHOM.out.unmerged_r1_fq_fail, LEEHOM.out.unmerged_r2_fq_fail) + ch_versions = ch_versions.mix(LEEHOM.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(LEEHOM.out.log) + } else if (val_adapter_tool == "fastp") { + FASTP( + ch_input_reads.map { meta, files -> [ meta, files, ch_adapters ] }, + val_fastp_discard_trimmed_pass, + val_fastp_save_trimmed_fail, + val_save_merged + ) + + if (val_save_merged) { + ch_processed_reads = FASTP.out.reads_merged + } else { + ch_processed_reads = FASTP.out.reads + } + ch_discarded_reads = ch_discarded_reads.mix(FASTP.out.reads_fail.transpose()) // .transpose() because paired reads have 3 fail files in an array + ch_log = FASTP.out.log + ch_report = FASTP.out.html + ch_versions = ch_versions.mix(FASTP.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json) + } else if (val_adapter_tool == "adapterremoval") { + ch_adapterremoval_in = ch_input_reads + .branch { meta, _reads -> + single: meta.single_end + paired: !meta.single_end + } + + ADAPTERREMOVAL_SE( ch_adapterremoval_in.single, ch_adapters ) + ADAPTERREMOVAL_PE( ch_adapterremoval_in.paired, ch_adapters ) + + if (val_save_merged) { + ch_processed_reads = ADAPTERREMOVAL_SE.out.collapsed + .mix( + ADAPTERREMOVAL_PE.out.collapsed, + ADAPTERREMOVAL_SE.out.collapsed_truncated, + ADAPTERREMOVAL_PE.out.collapsed_truncated + ) + } else { + ch_processed_reads = ADAPTERREMOVAL_SE.out.singles_truncated.mix(ADAPTERREMOVAL_PE.out.paired_truncated) + } + ch_discarded_reads = ch_discarded_reads.mix(ADAPTERREMOVAL_SE.out.discarded, ADAPTERREMOVAL_PE.out.discarded) + ch_paired_interleaved = ADAPTERREMOVAL_SE.out.paired_interleaved.mix(ADAPTERREMOVAL_PE.out.paired_interleaved) + ch_versions = ch_versions.mix(ADAPTERREMOVAL_SE.out.versions.first(), ADAPTERREMOVAL_PE.out.versions.first()) + ch_multiqc_files = ch_multiqc_files.mix(ADAPTERREMOVAL_PE.out.settings, ADAPTERREMOVAL_SE.out.settings) + } else { + error('Please choose one of the available adapter removal and merging tools: ["trimmomatic", "cutadapt", "trimgalore", "bbduk", "leehom", "fastp", "adapterremoval"]') + } + + emit: + processed_reads = ch_processed_reads // channel: [ val(meta), [ fastq.gz ] ] + discarded_reads = ch_discarded_reads // channel: [ val(meta), [ fastq.gz ] ] + paired_interleaved = ch_paired_interleaved // channel: [ val(meta), [ fastq.gz ] ] + logfile = ch_log // channel: [ val(meta), [ {log,txt} ] ] + report = ch_report // channel: [ val(meta), [ {summary,html,zip} ] ] + versions = ch_versions // channel: [ versions.yml ] + multiqc_files = ch_multiqc_files +} diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/meta.yml b/subworkflows/nf-core/fastq_removeadapters_merge/meta.yml new file mode 100644 index 000000000000..2221130fdda5 --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/meta.yml @@ -0,0 +1,97 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "fastq_removeadapters_merge" +description: Remove adapters and merge reads based on various module choices +keywords: + - adapters + - removal + - short reads + - merge + - trim +components: + - trimmomatic + - cutadapt + - trimgalore + - bbmap/bbduk + - leehom + - fastp + - adapterremoval +input: + - ch_input_reads: + type: file + description: | + List of FastQ files of size 1 and 2 for single-end and paired-end data, respectively. + Structure: [ val(meta), [ path(reads) ] ] + - val_adapter_tool: + type: string + description: | + Choose one of the available adapter removal and/or merging tools + enum: ["trimmomatic", "cutadapt", "trimgalore", "bbduk", "leehom", "fastp", "adapterremoval"] + - ch_adapters: + type: file + description: | + Optional reference files, containing adapter and/or contaminant sequences for removal. + In fasta format for bbmap/bbduk and fastp, or in text format for AdapterRemoval (one adapter per line). + - val_save_merged: + type: boolean + description: | + Specify true to output merged reads instead + Used by fastp and adapterremoval + - val_fastp_discard_trimmed_pass: + type: boolean + description: | + Used only by fastp. + Specify true to not write any reads that pass trimming thresholds from the fastp process. + This can be used to use fastp for the output report only. + - val_fastp_save_trimmed_fail: + type: boolean + description: | + Used only by fastp. + Specify true to save files that failed to pass fastp trimming thresholds +output: + - processed_reads: + type: file + description: | + Structure: [ val(meta), path(fastq.gz) ] + The trimmed/modified single or paired end or merged fastq reads + pattern: "*.fastq.gz" + - discarded_reads: + type: file + description: | + Structure: [ val(meta), path(fastq.gz) ] + The discarded reads + pattern: "*.fastq.gz" + - paired_interleaved: + type: file + description: | + Structure: [ val(meta), path(fastq.gz) ] + Adapterremoval paired-end reads in a single file, interleaving mate 1 and mate 2 reads + pattern: "*.paired.fastq.gz" + - logfile: + type: file + description: | + Execution log file + (trimmomatic {log}, trimgalore {txt}, fastp {log}) + pattern: "*.{log,txt}" + - report: + type: file + description: | + Execution report + (trimmomatic {summary}, trimgalore {html,zip}, fastp {html}) + pattern: "*.{summary,html,zip}" + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" + - multiqc_files: + type: file + description: | + MultiQC-compatible output files from tools used in preprocessing + (trimmomatic, cutadapt, bbduk, leehom, fastp, adapterremoval) +authors: + - "@kornkv" + - "@vagkaratzas" +maintainers: + - "@kornkv" + - "@vagkaratzas" diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/tests/main.nf.test b/subworkflows/nf-core/fastq_removeadapters_merge/tests/main.nf.test new file mode 100644 index 000000000000..b18b22e1ee98 --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/tests/main.nf.test @@ -0,0 +1,302 @@ +nextflow_workflow { + + name "Test Subworkflow FASTQ_REMOVEADAPTERS_MERGE" + script "../main.nf" + workflow "FASTQ_REMOVEADAPTERS_MERGE" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/fastq_removeadapters_merge" + tag "trimmomatic" + tag "cutadapt" + tag "trimgalore" + tag "bbmap" + tag "bbmap/bbduk" + tag "leehom" + tag "fastp" + tag "adapterremoval" + + test("sarscov2 - fastq - trimmomatic - single-end") { + config "./nextflow_SE.config" + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + 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] = "trimmomatic" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + workflow.out.logfile[0][1], + workflow.out.report[0][1], + workflow.out.multiqc_files.collect { file(it[1]).name }, + workflow.out.versions.collect { path(it).yaml } + ).match()} + ) + } + } + + test("sarscov2 - fastq - cutadapt - paired-end") { + config "./nextflow.config" + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + 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] = "cutadapt" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + workflow.out.multiqc_files.collect { file(it[1]).name } + ).match()} + ) + } + } + + test("sarscov2 - fastq - trimgalore - single-end") { + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + 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] = "trimgalore" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + path(workflow.out.logfile[0][1]).readLines().size() + ).match()} + ) + } + } + + test("sarscov2 - fastq - bbduk - paired-end") { + config "./nextflow.config" + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + workflow { + """ + input[0] = channel.of([ + [ id:'test_bbduk', 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] = "bbduk" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + workflow.out.multiqc_files.collect { file(it[1]).name } + ).match()} + ) + } + } + + test("sarscov2 - fastq - leehom - single-end") { + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + 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] = "leehom" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + workflow.out.discarded_reads.collect { file(it[1]).name }, + workflow.out.multiqc_files.collect { file(it[1]).name }, + workflow.out.versions.collect { path(it).yaml } + ).match()} + ) + } + } + + test("sarscov2 - fastq - fastp - single-end") { + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + 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] = "fastp" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = true // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + workflow.out.discarded_reads[0][1], + path(workflow.out.logfile[0][1]).readLines().size(), + path(workflow.out.report[0][1]).readLines().size(), + workflow.out.multiqc_files.collect { file(it[1]).name }, + workflow.out.versions.collect { path(it).yaml } + ).match()} + ) + } + } + + test("sarscov2 - fastq - adapterremoval - paired-end - merge") { + config "./nextflow_PE.config" + when { + params { + save_merged = true + adapterremoval_args = save_merged ? "--collapse" : "" + } + 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] = "adapterremoval" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot( + workflow.out.processed_reads[0][1], + workflow.out.discarded_reads.collect { file(it[1]).name }, + workflow.out.versions.collect { path(it).yaml }, + workflow.out.multiqc_files.collect { file(it[1]).name } + ).match()} + ) + } + } + + test("sarscov2 - fastq - trimmomatic - paired-end - stub") { + config "./nextflow_PE.config" + options "-stub" + + when { + params { + save_merged = false + adapterremoval_args = save_merged ? "--collapse" : "" + } + workflow { + """ + input[0] = [ + [ 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] = "trimmomatic" // val_adapter_tool + input[2] = [] // ch_adapters + input[3] = params.save_merged // val_save_merged + input[4] = false // val_fastp_discard_trimmed_pass + input[5] = false // val_fastp_save_trimmed_fail + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + } + +} diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/tests/main.nf.test.snap b/subworkflows/nf-core/fastq_removeadapters_merge/tests/main.nf.test.snap new file mode 100644 index 000000000000..ff92826858df --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/tests/main.nf.test.snap @@ -0,0 +1,269 @@ +{ + "sarscov2 - fastq - trimmomatic - single-end": { + "content": [ + "test.SE.paired.trim.fastq.gz:md5,e68abbd3b88f7ec12940a4f5c2b8bfb9", + "test_trim.log:md5,e4c3f619e9b0e26847f8f3e3d9af319b", + "test.summary:md5,24c973237557a1439c775ca19a5deaa5", + [ + "test_out.log" + ], + [ + { + "FASTQ_REMOVEADAPTERS_MERGE:TRIMMOMATIC": { + "trimmomatic": 0.39 + } + } + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:19:19.104684739" + }, + "sarscov2 - fastq - leehom - single-end": { + "content": [ + "test.fq.gz:md5,304af6f5f6bb58c70abf7924eacfa175", + [ + "test.fail.fq.gz" + ], + [ + "test.log" + ], + [ + { + "FASTQ_REMOVEADAPTERS_MERGE:LEEHOM": { + "leehom": "1.2.15" + } + } + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:48:35.122105584" + }, + "sarscov2 - fastq - trimmomatic - paired-end - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.trim_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.paired.trim_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "1": [ + [ + { + "id": "test", + "single_end": false + }, + "test.unpaired.trim_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ], + [ + { + "id": "test", + "single_end": false + }, + "test.unpaired.trim_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "2": [ + + ], + "3": [ + [ + { + "id": "test", + "single_end": false + }, + "test_trim.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "single_end": false + }, + "test.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + "versions.yml:md5,134eb815a4e39fddbfa930d8023aafaa" + ], + "6": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "discarded_reads": [ + [ + { + "id": "test", + "single_end": false + }, + "test.unpaired.trim_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ], + [ + { + "id": "test", + "single_end": false + }, + "test.unpaired.trim_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "logfile": [ + [ + { + "id": "test", + "single_end": false + }, + "test_trim.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "multiqc_files": [ + [ + { + "id": "test", + "single_end": false + }, + "test_out.log:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "paired_interleaved": [ + + ], + "processed_reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test.paired.trim_1.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940", + "test.paired.trim_2.fastq.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ] + ], + "report": [ + [ + { + "id": "test", + "single_end": false + }, + "test.summary:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,134eb815a4e39fddbfa930d8023aafaa" + ] + } + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:19:48.58678264" + }, + "sarscov2 - fastq - cutadapt - paired-end": { + "content": [ + [ + "test_1.trim.fastq.gz:md5,682dab8e982563cffac2bd60bf7444f4", + "test_2.trim.fastq.gz:md5,1a1e8ab23af40e6474be0cdf82fab907" + ], + [ + "test.cutadapt.log" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:19:27.959952445" + }, + "sarscov2 - fastq - bbduk - paired-end": { + "content": [ + [ + "test_bbduk_1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec", + "test_bbduk_2.fastq.gz:md5,2ebae722295ea66d84075a3b042e2b42" + ], + [ + "test_bbduk.bbduk.log" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:19:41.651709543" + }, + "sarscov2 - fastq - trimgalore - single-end": { + "content": [ + "test_trimmed.fq.gz:md5,566d44cca0d22c522d6cf0e50c7165dc", + 60 + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:19:34.98214978" + }, + "sarscov2 - fastq - adapterremoval - paired-end - merge": { + "content": [ + "test.collapsed.fastq.gz:md5,369452751050a7f1e31b839702d61417", + [ + "test.discarded.fastq.gz" + ], + [ + { + "FASTQ_REMOVEADAPTERS_MERGE:ADAPTERREMOVAL_PE": { + "adapterremoval": "2.3.2" + } + } + ], + [ + "test.settings" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:48:05.024036426" + }, + "sarscov2 - fastq - fastp - single-end": { + "content": [ + "test.fastp.fastq.gz:md5,67b2bbae47f073e05a97a9c2edce23c7", + "test.fail.fastq.gz:md5,3e4aaadb66a5b8fc9b881bf39c227abd", + 32, + 2394, + [ + "test.fastp.json" + ], + [ + { + "FASTQ_REMOVEADAPTERS_MERGE:FASTP": { + "fastp": "1.0.1" + } + } + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2025-12-19T11:49:02.995746975" + } +} \ No newline at end of file diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow.config b/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow.config new file mode 100644 index 000000000000..e1badf49b21a --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow.config @@ -0,0 +1,9 @@ +process { + withName: 'CUTADAPT' { + ext.args = '-q 25' + } + + withName: 'BBMAP_BBDUK' { + ext.args = 'trimq=10 qtrim=r' + } +} diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow_PE.config b/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow_PE.config new file mode 100644 index 000000000000..dc4eef5d6025 --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow_PE.config @@ -0,0 +1,9 @@ +process { + withName: 'TRIMMOMATIC' { + ext.args = 'ILLUMINACLIP:TruSeq3-PE.fa:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36' + } + + withName: 'ADAPTERREMOVAL_PE' { + ext.args = params.adapterremoval_args + } +} diff --git a/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow_SE.config b/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow_SE.config new file mode 100644 index 000000000000..82c186711dab --- /dev/null +++ b/subworkflows/nf-core/fastq_removeadapters_merge/tests/nextflow_SE.config @@ -0,0 +1,9 @@ +process { + withName: 'TRIMMOMATIC' { + ext.args = 'ILLUMINACLIP:TruSeq3-SE:2:30:10 LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36' + } + + withName: 'ADAPTERREMOVAL_SE' { + ext.args = params.adapterremoval_args + } +}