From 1fc55bba343d7a65160d1d1d9c7e638b91da96dd Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 09:32:39 +0200 Subject: [PATCH 01/11] Change fastp to fq --- CITATIONS.md | 4 +- conf/modules.config | 6 +- conf/test.config | 2 - conf/test_full.config | 6 +- modules.json | 8 +- modules/nf-core/fastp/main.nf | 120 --- modules/nf-core/fastp/meta.yml | 75 -- modules/nf-core/fastp/tests/main.nf.test | 725 ------------------ modules/nf-core/fastp/tests/main.nf.test.snap | 330 -------- .../fastp/tests/nextflow.interleaved.config | 5 - .../fastp/tests/nextflow.save_failed.config | 5 - modules/nf-core/fastp/tests/tags.yml | 2 - .../{fastp => fq/lint}/environment.yml | 4 +- modules/nf-core/fq/lint/main.nf | 33 + modules/nf-core/fq/lint/meta.yml | 31 + modules/nf-core/fq/lint/tests/main.nf.test | 63 ++ .../nf-core/fq/lint/tests/main.nf.test.snap | 52 ++ modules/nf-core/fq/lint/tests/tags.yml | 2 + workflows/demo.nf | 20 +- 19 files changed, 200 insertions(+), 1293 deletions(-) delete mode 100644 modules/nf-core/fastp/main.nf delete mode 100644 modules/nf-core/fastp/meta.yml delete mode 100644 modules/nf-core/fastp/tests/main.nf.test delete mode 100644 modules/nf-core/fastp/tests/main.nf.test.snap delete mode 100644 modules/nf-core/fastp/tests/nextflow.interleaved.config delete mode 100644 modules/nf-core/fastp/tests/nextflow.save_failed.config delete mode 100644 modules/nf-core/fastp/tests/tags.yml rename modules/nf-core/{fastp => fq/lint}/environment.yml (62%) create mode 100644 modules/nf-core/fq/lint/main.nf create mode 100644 modules/nf-core/fq/lint/meta.yml create mode 100644 modules/nf-core/fq/lint/tests/main.nf.test create mode 100644 modules/nf-core/fq/lint/tests/main.nf.test.snap create mode 100644 modules/nf-core/fq/lint/tests/tags.yml diff --git a/CITATIONS.md b/CITATIONS.md index b5d0459..2edc275 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -14,9 +14,7 @@ > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. -- [fastp](https://www.ncbi.nlm.nih.gov/pubmed/30423086/) - - > Chen S, Zhou Y, Chen Y, Gu J. fastp: an ultra-fast all-in-one FASTQ preprocessor. Bioinformatics. 2018 Sep 1;34(17):i884-i890. doi: 10.1093/bioinformatics/bty560. PubMed PMID: 30423086; PubMed Central PMCID: PMC6129281. +- [fq](https://github.com/stjude-rust-labs/fq) - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) diff --git a/conf/modules.config b/conf/modules.config index 08b03f8..b9a8299 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -28,11 +28,11 @@ process { } - withName: 'FASTP' { + withName: 'FQ_LINT' { publishDir = [ - path: { "${params.outdir}/fastp/${meta.id}" }, + path: { "${params.outdir}/fq/${meta.id}" }, mode: params.publish_dir_mode, - pattern: "*.{html,json,log}" + pattern: "*.{txt}" ] } diff --git a/conf/test.config b/conf/test.config index 802af2b..0e7f044 100644 --- a/conf/test.config +++ b/conf/test.config @@ -22,6 +22,4 @@ params { // Input data input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - // Genome references - genome = 'R64-1-1' } diff --git a/conf/test_full.config b/conf/test_full.config index 31a8ee5..6346afd 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -14,9 +14,7 @@ params { config_profile_name = 'Full test profile' config_profile_description = 'Full test dataset to check pipeline function' - // Input data for full size test - input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + // Input data + input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv' - // Genome references - genome = 'R64-1-1' } diff --git a/modules.json b/modules.json index a1e9750..ebbe0cd 100644 --- a/modules.json +++ b/modules.json @@ -5,14 +5,14 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { - "fastp": { + "fastqc": { "branch": "master", - "git_sha": "95cf5fe0194c7bf5cb0e3027a2eb7e7c89385080", + "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", "installed_by": ["modules"] }, - "fastqc": { + "fq/lint": { "branch": "master", - "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", + "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", "installed_by": ["modules"] }, "multiqc": { diff --git a/modules/nf-core/fastp/main.nf b/modules/nf-core/fastp/main.nf deleted file mode 100644 index 4fc19b7..0000000 --- a/modules/nf-core/fastp/main.nf +++ /dev/null @@ -1,120 +0,0 @@ -process FASTP { - 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/fastp:0.23.4--h5f740d0_0' : - 'biocontainers/fastp:0.23.4--h5f740d0_0' }" - - input: - tuple val(meta), path(reads) - path adapter_fasta - val save_trimmed_fail - val save_merged - - output: - tuple val(meta), path('*.fastp.fastq.gz') , optional:true, emit: reads - tuple val(meta), path('*.json') , emit: json - tuple val(meta), path('*.html') , emit: html - tuple val(meta), path('*.log') , emit: log - path "versions.yml" , emit: versions - tuple val(meta), path('*.fail.fastq.gz') , optional:true, emit: reads_fail - tuple val(meta), path('*.merged.fastq.gz'), optional:true, emit: reads_merged - - when: - task.ext.when == null || task.ext.when - - script: - 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" : '' - // 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') ) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz - - fastp \\ - --stdout \\ - --in1 ${prefix}.fastq.gz \\ - --thread $task.cpus \\ - --json ${prefix}.fastp.json \\ - --html ${prefix}.fastp.html \\ - $adapter_list \\ - $fail_fastq \\ - $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) { - """ - [ ! -f ${prefix}.fastq.gz ] && ln -sf $reads ${prefix}.fastq.gz - - fastp \\ - --in1 ${prefix}.fastq.gz \\ - --out1 ${prefix}.fastp.fastq.gz \\ - --thread $task.cpus \\ - --json ${prefix}.fastp.json \\ - --html ${prefix}.fastp.html \\ - $adapter_list \\ - $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" : '' - """ - [ ! -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 - fastp \\ - --in1 ${prefix}_1.fastq.gz \\ - --in2 ${prefix}_2.fastq.gz \\ - --out1 ${prefix}_1.fastp.fastq.gz \\ - --out2 ${prefix}_2.fastp.fastq.gz \\ - --json ${prefix}.fastp.json \\ - --html ${prefix}.fastp.html \\ - $adapter_list \\ - $fail_fastq \\ - $merge_fastq \\ - --thread $task.cpus \\ - --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 - """ - } - - stub: - def prefix = task.ext.prefix ?: "${meta.id}" - def is_single_output = task.ext.args?.contains('--interleaved_in') || meta.single_end - def touch_reads = is_single_output ? "${prefix}.fastp.fastq.gz" : "${prefix}_1.fastp.fastq.gz ${prefix}_2.fastp.fastq.gz" - def touch_merged = (!is_single_output && save_merged) ? "touch ${prefix}.merged.fastq.gz" : "" - """ - touch $touch_reads - touch "${prefix}.fastp.json" - touch "${prefix}.fastp.html" - touch "${prefix}.fastp.log" - $touch_merged - - 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 deleted file mode 100644 index c22a16a..0000000 --- a/modules/nf-core/fastp/meta.yml +++ /dev/null @@ -1,75 +0,0 @@ -name: fastp -description: Perform adapter/quality trimming on sequencing reads -keywords: - - trimming - - quality control - - fastq -tools: - - fastp: - description: | - A tool designed to provide fast all-in-one preprocessing for FastQ files. This tool is developed in C++ with multithreading supported to afford high performance. - documentation: https://github.com/OpenGene/fastp - doi: 10.1093/bioinformatics/bty560 - licence: ["MIT"] -input: - - meta: - type: map - description: | - Groovy Map containing sample information. Use 'single_end: true' to specify single ended or interleaved FASTQs. Use 'single_end: false' for paired-end reads. - 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. If you wish to run interleaved paired-end data, supply as single-end data - but with `--interleaved_in` in your `modules.conf`'s `ext.args` for the module. - - adapter_fasta: - type: file - description: File in FASTA format containing possible adapters to remove. - pattern: "*.{fasta,fna,fas,fa}" - - save_trimmed_fail: - type: boolean - description: Specify true to save files that failed to pass trimming thresholds ending in `*.fail.fastq.gz` - - save_merged: - type: boolean - description: Specify true to save all merged reads to the a file ending in `*.merged.fastq.gz` -output: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - reads: - type: file - description: The trimmed/modified/unmerged fastq reads - pattern: "*fastp.fastq.gz" - - json: - type: file - description: Results in JSON format - pattern: "*.json" - - html: - type: file - description: Results in HTML format - pattern: "*.html" - - log: - type: file - description: fastq log file - pattern: "*.log" - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - reads_fail: - type: file - description: Reads the failed the preprocessing - pattern: "*fail.fastq.gz" - - reads_merged: - type: file - description: Reads that were successfully merged - pattern: "*.{merged.fastq.gz}" -authors: - - "@drpatelh" - - "@kevinmenden" -maintainers: - - "@drpatelh" - - "@kevinmenden" diff --git a/modules/nf-core/fastp/tests/main.nf.test b/modules/nf-core/fastp/tests/main.nf.test deleted file mode 100644 index 6f1f489..0000000 --- a/modules/nf-core/fastp/tests/main.nf.test +++ /dev/null @@ -1,725 +0,0 @@ -nextflow_process { - - name "Test Process FASTP" - script "../main.nf" - process "FASTP" - tag "modules" - tag "modules_nfcore" - tag "fastp" - - test("test_fastp_single_end") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)" ] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end") } - ) - } - } - - test("test_fastp_single_end-stub") { - - options '-stub' - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - - assertAll( - { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_single_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_single_end_stub") } - ) - } - } - - test("test_fastp_paired_end") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 198'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end") } - ) - } - } - - test("test_fastp_paired_end-stub") { - - options '-stub' - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - assertAll( - { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end-stub") } - ) - } - } - - test("fastp test_fastp_interleaved") { - - config './nextflow.interleaved.config' - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "paired end (151 cycles + 151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 162"] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("fastp test_fastp_interleaved_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved") } - ) - } - } - - test("fastp test_fastp_interleaved-stub") { - - options '-stub' - - config './nextflow.interleaved.config' - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - assertAll( - { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { file(it[1]).getName() } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_interleaved-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_interleaved-stub") } - ) - } - } - - test("test_fastp_single_end_trim_fail") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "Q20 bases:12.922000 K (92.984097%)", - "single end (151 cycles)"] - def log_text = [ "Q20 bases: 12922(92.9841%)", - "reads passed filter: 99" ] - def read_lines = [ "@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1)).linesGzip.contains(read_line) } - } - }, - { failed_read_lines.each { failed_read_line -> - { assert path(process.out.reads_fail.get(0).get(1)).linesGzip.contains(failed_read_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { assert snapshot(process.out.json).match("test_fastp_single_end_trim_fail_json") }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_single_end_trim_fail") } - ) - } - } - - test("test_fastp_paired_end_trim_fail") { - - config './nextflow.save_failed.config' - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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)] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "Q20 bases:25.719000 K (93.033098%)", - "The input has little adapter percentage (~0.000000%), probably it's trimmed before."] - def log_text = [ "No adapter detected for read1", - "Q30 bases: 12281(88.3716%)"] - def json_text = ['"passed_filter_reads": 162'] - def read1_lines = ["@ERR5069949.2151832 NS500628:121:HK3MMAFX2:2:21208:10793:15304/1", - "TCATAAACCAAAGCACTCACAGTGTCAACAATTTCAGCAGGACAACGCCGACAAGTTCCGAGGAACATGTCTGGACCTATAGTTTTCATAAGTCTACACACTGAATTGAAATATTCTGGTTCTAGTGTGCCCTTAGTTAGCAATGTGCGT", - "AAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAAEEEEE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { failed_read2_lines.each { failed_read2_line -> - { assert path(process.out.reads_fail.get(0).get(1).get(2)).linesGzip.contains(failed_read2_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_trim_fail") } - ) - } - } - - test("test_fastp_paired_end_merged") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "
"] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683'] - def read1_lines = [ "@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged") } - ) - } - } - - test("test_fastp_paired_end_merged-stub") { - - options '-stub' - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = [] - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - assertAll( - { assert process.success }, - { - assert snapshot( - ( - [process.out.reads[0][0].toString()] + // meta - process.out.reads.collect { it[1].collect { item -> file(item).getName() } } + - process.out.json.collect { file(it[1]).getName() } + - process.out.html.collect { file(it[1]).getName() } + - process.out.log.collect { file(it[1]).getName() } + - process.out.reads_fail.collect { file(it[1]).getName() } + - process.out.reads_merged.collect { file(it[1]).getName() } - ).sort() - ).match("test_fastp_paired_end_merged-for_stub_match") - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_stub") } - ) - } - } - - test("test_fastp_paired_end_merged_adapterlist") { - - when { - params { - outdir = "$outputDir" - } - process { - """ - adapter_fasta = Channel.of([ file(params.modules_testdata_base_path + 'delete_me/fastp/adapters.fasta', checkIfExists: true) ]) - 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) ] - ]) - input[1] = adapter_fasta - input[2] = save_trimmed_fail - input[3] = save_merged - """ - } - } - - then { - def html_text = [ "
"] - def log_text = [ "Merged and filtered:", - "total reads: 75", - "total bases: 13683"] - def json_text = ['"merged_and_filtered": {', '"total_reads": 75', '"total_bases": 13683',"--adapter_fasta"] - def read1_lines = ["@ERR5069949.1066259 NS500628:121:HK3MMAFX2:1:11312:18369:8333/1", - "CCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTC", - "AAAAAEAEEAEEEEEEEEEEEEEEEEAEEEEAEEEEEEEEAEEEEEEEEEEEEEEEEE/EAEEEEEE/6EEEEEEEEEEAEEAEEE/EE/AEEAEEEEEAEEEA/EEAAEAE - { assert path(process.out.reads.get(0).get(1).get(0)).linesGzip.contains(read1_line) } - } - }, - { read2_lines.each { read2_line -> - { assert path(process.out.reads.get(0).get(1).get(1)).linesGzip.contains(read2_line) } - } - }, - { read_merged_lines.each { read_merged_line -> - { assert path(process.out.reads_merged.get(0).get(1)).linesGzip.contains(read_merged_line) } - } - }, - { html_text.each { html_part -> - { assert path(process.out.html.get(0).get(1)).getText().contains(html_part) } - } - }, - { json_text.each { json_part -> - { assert path(process.out.json.get(0).get(1)).getText().contains(json_part) } - } - }, - { log_text.each { log_part -> - { assert path(process.out.log.get(0).get(1)).getText().contains(log_part) } - } - }, - { assert snapshot(process.out.versions).match("versions_paired_end_merged_adapterlist") } - ) - } - } -} diff --git a/modules/nf-core/fastp/tests/main.nf.test.snap b/modules/nf-core/fastp/tests/main.nf.test.snap deleted file mode 100644 index 3e87628..0000000 --- a/modules/nf-core/fastp/tests/main.nf.test.snap +++ /dev/null @@ -1,330 +0,0 @@ -{ - "fastp test_fastp_interleaved_json": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,b24e0624df5cc0b11cd5ba21b726fb22" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:19:15.063001" - }, - "test_fastp_paired_end_merged-for_stub_match": { - "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:10:13.467574" - }, - "versions_interleaved": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:56:24.615634793" - }, - "test_fastp_single_end_json": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,c852d7a6dba5819e4ac8d9673bedcacc" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:18:43.526412" - }, - "versions_paired_end": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:55:42.333545689" - }, - "test_fastp_paired_end_match": { - "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:03:06.431833729" - }, - "test_fastp_interleaved-_match": { - "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:19:15.111894" - }, - "test_fastp_paired_end_merged_match": { - "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "test.merged.fastq.gz", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:08:44.496251446" - }, - "versions_single_end_stub": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:55:27.354051299" - }, - "versions_interleaved-stub": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:56:46.535528418" - }, - "versions_single_end_trim_fail": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:59:03.724591407" - }, - "test_fastp_paired_end-for_stub_match": { - "content": [ - [ - [ - "test_1.fastp.fastq.gz", - "test_2.fastp.fastq.gz" - ], - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=false}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:07:15.398827" - }, - "versions_paired_end-stub": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:56:06.50017282" - }, - "versions_single_end": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:55:07.67921647" - }, - "versions_paired_end_merged_stub": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:59:47.350653154" - }, - "test_fastp_interleaved-for_stub_match": { - "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:08:06.127974" - }, - "versions_paired_end_trim_fail": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:59:18.140484878" - }, - "test_fastp_single_end-for_stub_match": { - "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:06:00.244202" - }, - "test_fastp_single_end-_match": { - "content": [ - [ - "test.fastp.fastq.gz", - "test.fastp.html", - "test.fastp.json", - "test.fastp.log", - "{id=test, single_end=true}" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-03-18T16:18:43.580336" - }, - "versions_paired_end_merged_adapterlist": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T12:05:37.845370554" - }, - "versions_paired_end_merged": { - "content": [ - [ - "versions.yml:md5,48ffc994212fb1fc9f83a74fa69c9f02" - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-02-01T11:59:32.860543858" - }, - "test_fastp_single_end_trim_fail_json": { - "content": [ - [ - [ - { - "id": "test", - "single_end": true - }, - "test.fastp.json:md5,9a7ee180f000e8d00c7fb67f06293eb5" - ] - ] - ], - "meta": { - "nf-test": "0.8.4", - "nextflow": "23.10.1" - }, - "timestamp": "2024-01-17T18:08:41.942317" - } -} \ No newline at end of file diff --git a/modules/nf-core/fastp/tests/nextflow.interleaved.config b/modules/nf-core/fastp/tests/nextflow.interleaved.config deleted file mode 100644 index 4be8dbd..0000000 --- a/modules/nf-core/fastp/tests/nextflow.interleaved.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: FASTP { - ext.args = "--interleaved_in -e 30" - } -} diff --git a/modules/nf-core/fastp/tests/nextflow.save_failed.config b/modules/nf-core/fastp/tests/nextflow.save_failed.config deleted file mode 100644 index 53b61b0..0000000 --- a/modules/nf-core/fastp/tests/nextflow.save_failed.config +++ /dev/null @@ -1,5 +0,0 @@ -process { - withName: FASTP { - ext.args = "-e 30" - } -} diff --git a/modules/nf-core/fastp/tests/tags.yml b/modules/nf-core/fastp/tests/tags.yml deleted file mode 100644 index c1afcce..0000000 --- a/modules/nf-core/fastp/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fastp: - - modules/nf-core/fastp/** diff --git a/modules/nf-core/fastp/environment.yml b/modules/nf-core/fq/lint/environment.yml similarity index 62% rename from modules/nf-core/fastp/environment.yml rename to modules/nf-core/fq/lint/environment.yml index 70389e6..66145f4 100644 --- a/modules/nf-core/fastp/environment.yml +++ b/modules/nf-core/fq/lint/environment.yml @@ -1,7 +1,7 @@ -name: fastp +name: fq_lint channels: - conda-forge - bioconda - defaults dependencies: - - bioconda::fastp=0.23.4 + - bioconda::fq=0.9.1 diff --git a/modules/nf-core/fq/lint/main.nf b/modules/nf-core/fq/lint/main.nf new file mode 100644 index 0000000..efdb254 --- /dev/null +++ b/modules/nf-core/fq/lint/main.nf @@ -0,0 +1,33 @@ +process FQ_LINT { + 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/fq:0.9.1--h9ee0642_0': + 'biocontainers/fq:0.9.1--h9ee0642_0' }" + + input: + tuple val(meta), path(fastq) + + output: + tuple val(meta), path("*.fq_lint.txt"), emit: lint + 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}" + """ + fq lint \\ + $args \\ + $fastq > ${prefix}.fq_lint.txt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + fq: \$(echo \$(fq lint --version | sed 's/fq-lint //g')) + END_VERSIONS + """ +} diff --git a/modules/nf-core/fq/lint/meta.yml b/modules/nf-core/fq/lint/meta.yml new file mode 100644 index 0000000..aaa7caa --- /dev/null +++ b/modules/nf-core/fq/lint/meta.yml @@ -0,0 +1,31 @@ +name: "fq_lint" +description: fq lint is a FASTQ file pair validator. +keywords: + - lint + - fastq +tools: + - "fq": + description: "fq is a library to generate and validate FASTQ file pairs." + homepage: "https://github.com/stjude-rust-labs/fq" + documentation: "https://github.com/stjude-rust-labs/fq" + tool_dev_url: "https://github.com/stjude-rust-labs/fq" + licence: "['MIT']" +input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - fastq: + type: file + description: FASTQ file list + pattern: "*.fastq{,.gz}" +output: + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" +authors: + - "@adamrtalbot" +maintainers: + - "@adamrtalbot" diff --git a/modules/nf-core/fq/lint/tests/main.nf.test b/modules/nf-core/fq/lint/tests/main.nf.test new file mode 100644 index 0000000..bd83324 --- /dev/null +++ b/modules/nf-core/fq/lint/tests/main.nf.test @@ -0,0 +1,63 @@ +nextflow_process { + + name "Test Process FQ_LINT" + script "../main.nf" + process "FQ_LINT" + + tag "modules" + tag "modules_nfcore" + tag "fq" + tag "fq/lint" + + test("test_fq_lint_success") { + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ 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 process.out.lint.get(0).get(1) ==~ ".*/test.fq_lint.txt" }, + { assert path(process.out.lint.get(0).get(1)).getText().contains("fq-lint start") }, + { assert path(process.out.lint.get(0).get(1)).getText().contains("read 100 records") }, + { assert path(process.out.lint.get(0).get(1)).getText().contains("fq-lint end") }, + ) + } + + } + + test("test_fq_lint_fail") { + when { + params { + outdir = "$outputDir" + } + process { + """ + input[0] = [ [ id:'test', single_end:false ], // meta map + [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), + file(params.test_data['candidatus_portiera_aleyrodidarum']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] + ] + """ + } + } + + then { + assertAll ( + { assert !process.success }, + { assert snapshot(process.out).match() }, + ) + } + + } + +} diff --git a/modules/nf-core/fq/lint/tests/main.nf.test.snap b/modules/nf-core/fq/lint/tests/main.nf.test.snap new file mode 100644 index 0000000..18be683 --- /dev/null +++ b/modules/nf-core/fq/lint/tests/main.nf.test.snap @@ -0,0 +1,52 @@ +{ + "test_fq_lint_fail": { + "content": [ + { + "0": [ + + ], + "1": [ + + ], + "lint": [ + + ], + "versions": [ + + ] + } + ], + "timestamp": "2023-10-17T11:27:49.533776" + }, + "test_fq_lint_success": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fq_lint.txt:md5,ad97318ef85cf80dcc6312cfa726709c" + ] + ], + "1": [ + "versions.yml:md5,10ce0730904e55dc8827a894c7042c8c" + ], + "lint": [ + [ + { + "id": "test", + "single_end": false + }, + "test.fq_lint.txt:md5,ad97318ef85cf80dcc6312cfa726709c" + ] + ], + "versions": [ + "versions.yml:md5,10ce0730904e55dc8827a894c7042c8c" + ] + } + ], + "timestamp": "2023-10-17T11:27:38.071998" + } +} \ No newline at end of file diff --git a/modules/nf-core/fq/lint/tests/tags.yml b/modules/nf-core/fq/lint/tests/tags.yml new file mode 100644 index 0000000..9c9c323 --- /dev/null +++ b/modules/nf-core/fq/lint/tests/tags.yml @@ -0,0 +1,2 @@ +fq/lint: + - modules/nf-core/fq/lint/** diff --git a/workflows/demo.nf b/workflows/demo.nf index 77db437..ba02e41 100644 --- a/workflows/demo.nf +++ b/workflows/demo.nf @@ -5,7 +5,7 @@ */ include { FASTQC } from '../modules/nf-core/fastqc/main' -include { FASTP } from '../modules/nf-core/fastp/main' +include { FQ_LINT } from '../modules/nf-core/fq/lint/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-validation' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' @@ -29,7 +29,7 @@ workflow DEMO { ch_multiqc_files = Channel.empty() // - // MODULE: Run FastQC + // MODULE: Run FASTQC // FASTQC ( ch_samplesheet @@ -38,18 +38,12 @@ workflow DEMO { ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // - // MODULE: Run Fastp + // MODULE: Run FQ_LINT // - ch_adapters = params.adapters ? params.adapters : [] - - FASTP ( - ch_samplesheet, - ch_adapters, - params.save_trimmed_fail, - params.save_merged + FQ_LINT ( + ch_samplesheet ) - ch_multiqc_files = ch_multiqc_files.mix(FASTP.out.json.collect{it[1]}.ifEmpty([])) - ch_versions = ch_versions.mix(FASTP.out.versions.first()) + ch_versions = ch_versions.mix(FQ_LINT.out.versions.first()) // // Collate and save software versions @@ -59,7 +53,7 @@ workflow DEMO { .set { ch_collated_versions } // - // MODULE: MultiQC + // 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() From f1eb416e6b2d9dcd7c60edaa08a13eb295dc99cd Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 12:25:18 +0200 Subject: [PATCH 02/11] Change module to Seqtk --- modules.json | 5 ++ modules/nf-core/seqtk/trim/environment.yml | 7 ++ modules/nf-core/seqtk/trim/main.nf | 38 +++++++++ modules/nf-core/seqtk/trim/meta.yml | 44 +++++++++++ modules/nf-core/seqtk/trim/tests/main.nf.test | 65 ++++++++++++++++ .../seqtk/trim/tests/main.nf.test.snap | 78 +++++++++++++++++++ modules/nf-core/seqtk/trim/tests/tags.yml | 2 + workflows/demo.nf | 6 +- 8 files changed, 242 insertions(+), 3 deletions(-) create mode 100644 modules/nf-core/seqtk/trim/environment.yml create mode 100644 modules/nf-core/seqtk/trim/main.nf create mode 100644 modules/nf-core/seqtk/trim/meta.yml create mode 100644 modules/nf-core/seqtk/trim/tests/main.nf.test create mode 100644 modules/nf-core/seqtk/trim/tests/main.nf.test.snap create mode 100644 modules/nf-core/seqtk/trim/tests/tags.yml diff --git a/modules.json b/modules.json index ebbe0cd..d8a849e 100644 --- a/modules.json +++ b/modules.json @@ -19,6 +19,11 @@ "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", "installed_by": ["modules"] + }, + "seqtk/trim": { + "branch": "master", + "git_sha": "71c669747731cbc360dc220069c9f83015558c07", + "installed_by": ["modules"] } } }, diff --git a/modules/nf-core/seqtk/trim/environment.yml b/modules/nf-core/seqtk/trim/environment.yml new file mode 100644 index 0000000..389a3a9 --- /dev/null +++ b/modules/nf-core/seqtk/trim/environment.yml @@ -0,0 +1,7 @@ +name: seqtk_trim +channels: + - conda-forge + - bioconda + - defaults +dependencies: + - bioconda::seqtk=1.4 diff --git a/modules/nf-core/seqtk/trim/main.nf b/modules/nf-core/seqtk/trim/main.nf new file mode 100644 index 0000000..0f7e4d7 --- /dev/null +++ b/modules/nf-core/seqtk/trim/main.nf @@ -0,0 +1,38 @@ +process SEQTK_TRIM { + 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/seqtk:1.4--he4a0461_1' : + 'biocontainers/seqtk:1.4--he4a0461_1' }" + + input: + tuple val(meta), path(reads) + + output: + tuple val(meta), path("*.fastq.gz"), emit: reads + 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}" + """ + printf "%s\\n" $reads | while read f; + do + seqtk \\ + trimfq \\ + $args \\ + \$f \\ + | gzip --no-name > ${prefix}_\$(basename \$f) + done + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + seqtk: \$(echo \$(seqtk 2>&1) | sed 's/^.*Version: //; s/ .*\$//') + END_VERSIONS + """ +} diff --git a/modules/nf-core/seqtk/trim/meta.yml b/modules/nf-core/seqtk/trim/meta.yml new file mode 100644 index 0000000..1177057 --- /dev/null +++ b/modules/nf-core/seqtk/trim/meta.yml @@ -0,0 +1,44 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json +name: seqtk_trim +description: Trim low quality bases from FastQ files +keywords: + - trimfq + - fastq + - seqtk +tools: + - "seqtk": + description: "Seqtk is a fast and lightweight tool for processing sequences in the FASTA or FASTQ format" + homepage: https://github.com/lh3/seqtk + documentation: https://docs.csc.fi/apps/seqtk/ + tool_dev_url: https://github.com/lh3/seqtk + licence: ["MIT"] + +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 + pattern: "*.{fastq.gz}" + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. [ id:'test', single_end:false ] + - versions: + type: file + description: File containing software versions + pattern: "versions.yml" + - reads: + type: file + description: Filtered FastQ files + pattern: "*.{fastq.gz}" + +authors: + - "@laramiellindsey" diff --git a/modules/nf-core/seqtk/trim/tests/main.nf.test b/modules/nf-core/seqtk/trim/tests/main.nf.test new file mode 100644 index 0000000..d99b6b2 --- /dev/null +++ b/modules/nf-core/seqtk/trim/tests/main.nf.test @@ -0,0 +1,65 @@ +nextflow_process { + + name "Test Process SEQTK_TRIM" + script "modules/nf-core/seqtk/trim/main.nf" + process "SEQTK_TRIM" + + tag "modules" + tag "modules_nfcore" + tag "seqtk" + tag "seqtk/trim" + + test("Single-end") { + + when { + params { + outdir = $outputDir + } + process { + """ + input[0] = [ + [ id:'test', single_end:true ], // meta map + file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true) + ] + """ + } + } + + then { + assertAll ( + { assert process.success }, + { assert snapshot(process.out).match()} + ) + } + + } + +test("Paired-end") { + + when { + params { + outdir = $outputDir + } + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + [ + 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).match()} + ) + } + + } + +} diff --git a/modules/nf-core/seqtk/trim/tests/main.nf.test.snap b/modules/nf-core/seqtk/trim/tests/main.nf.test.snap new file mode 100644 index 0000000..da181dc --- /dev/null +++ b/modules/nf-core/seqtk/trim/tests/main.nf.test.snap @@ -0,0 +1,78 @@ +{ + "Single-end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": true + }, + "test_test_1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "1": [ + "versions.yml:md5,d061ca0231d089b087e22d2001cd7c32" + ], + "reads": [ + [ + { + "id": "test", + "single_end": true + }, + "test_test_1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec" + ] + ], + "versions": [ + "versions.yml:md5,d061ca0231d089b087e22d2001cd7c32" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T06:10:55.544977" + }, + "Paired-end": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_test_1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec", + "test_test_2.fastq.gz:md5,2ebae722295ea66d84075a3b042e2b42" + ] + ] + ], + "1": [ + "versions.yml:md5,d061ca0231d089b087e22d2001cd7c32" + ], + "reads": [ + [ + { + "id": "test", + "single_end": false + }, + [ + "test_test_1.fastq.gz:md5,4161df271f9bfcd25d5845a1e220dbec", + "test_test_2.fastq.gz:md5,2ebae722295ea66d84075a3b042e2b42" + ] + ] + ], + "versions": [ + "versions.yml:md5,d061ca0231d089b087e22d2001cd7c32" + ] + } + ], + "meta": { + "nf-test": "0.8.4", + "nextflow": "23.10.1" + }, + "timestamp": "2024-05-03T06:11:38.487227" + } +} \ No newline at end of file diff --git a/modules/nf-core/seqtk/trim/tests/tags.yml b/modules/nf-core/seqtk/trim/tests/tags.yml new file mode 100644 index 0000000..250a138 --- /dev/null +++ b/modules/nf-core/seqtk/trim/tests/tags.yml @@ -0,0 +1,2 @@ +seqtk/trim: + - "modules/nf-core/seqtk/trim/**" diff --git a/workflows/demo.nf b/workflows/demo.nf index ba02e41..9fb4e72 100644 --- a/workflows/demo.nf +++ b/workflows/demo.nf @@ -5,7 +5,7 @@ */ include { FASTQC } from '../modules/nf-core/fastqc/main' -include { FQ_LINT } from '../modules/nf-core/fq/lint/main' +include { SEQTK_TRIM } from '../modules/nf-core/seqtk/trim/main' include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-validation' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' @@ -40,10 +40,10 @@ workflow DEMO { // // MODULE: Run FQ_LINT // - FQ_LINT ( + SEQTK_TRIM ( ch_samplesheet ) - ch_versions = ch_versions.mix(FQ_LINT.out.versions.first()) + ch_versions = ch_versions.mix(SEQTK_TRIM.out.versions.first()) // // Collate and save software versions From bcc256a0c71186462a96a51e07196b04a13ed14a Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 12:38:33 +0200 Subject: [PATCH 03/11] Add skip param --- CITATIONS.md | 2 +- modules.json | 31 +++++---- modules/nf-core/fq/lint/environment.yml | 7 --- modules/nf-core/fq/lint/main.nf | 33 ---------- modules/nf-core/fq/lint/meta.yml | 31 --------- modules/nf-core/fq/lint/tests/main.nf.test | 63 ------------------- .../nf-core/fq/lint/tests/main.nf.test.snap | 52 --------------- modules/nf-core/fq/lint/tests/tags.yml | 2 - nextflow.config | 6 +- nextflow_schema.json | 27 -------- workflows/demo.nf | 12 ++-- 11 files changed, 29 insertions(+), 237 deletions(-) delete mode 100644 modules/nf-core/fq/lint/environment.yml delete mode 100644 modules/nf-core/fq/lint/main.nf delete mode 100644 modules/nf-core/fq/lint/meta.yml delete mode 100644 modules/nf-core/fq/lint/tests/main.nf.test delete mode 100644 modules/nf-core/fq/lint/tests/main.nf.test.snap delete mode 100644 modules/nf-core/fq/lint/tests/tags.yml diff --git a/CITATIONS.md b/CITATIONS.md index 2edc275..934aa07 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -14,7 +14,7 @@ > Andrews, S. (2010). FastQC: A Quality Control Tool for High Throughput Sequence Data [Online]. -- [fq](https://github.com/stjude-rust-labs/fq) +- [seqtk](https://github.com/lh3/seqtk) - [MultiQC](https://pubmed.ncbi.nlm.nih.gov/27312411/) diff --git a/modules.json b/modules.json index d8a849e..4634b34 100644 --- a/modules.json +++ b/modules.json @@ -8,22 +8,23 @@ "fastqc": { "branch": "master", "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", - "installed_by": ["modules"] - }, - "fq/lint": { - "branch": "master", - "git_sha": "3f5420aa22e00bd030a2556dfdffc9e164ec0ec5", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] }, "seqtk/trim": { "branch": "master", "git_sha": "71c669747731cbc360dc220069c9f83015558c07", - "installed_by": ["modules"] + "installed_by": [ + "modules" + ] } } }, @@ -32,20 +33,26 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] }, "utils_nfvalidation_plugin": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": ["subworkflows"] + "installed_by": [ + "subworkflows" + ] } } } } } -} +} \ No newline at end of file diff --git a/modules/nf-core/fq/lint/environment.yml b/modules/nf-core/fq/lint/environment.yml deleted file mode 100644 index 66145f4..0000000 --- a/modules/nf-core/fq/lint/environment.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: fq_lint -channels: - - conda-forge - - bioconda - - defaults -dependencies: - - bioconda::fq=0.9.1 diff --git a/modules/nf-core/fq/lint/main.nf b/modules/nf-core/fq/lint/main.nf deleted file mode 100644 index efdb254..0000000 --- a/modules/nf-core/fq/lint/main.nf +++ /dev/null @@ -1,33 +0,0 @@ -process FQ_LINT { - 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/fq:0.9.1--h9ee0642_0': - 'biocontainers/fq:0.9.1--h9ee0642_0' }" - - input: - tuple val(meta), path(fastq) - - output: - tuple val(meta), path("*.fq_lint.txt"), emit: lint - 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}" - """ - fq lint \\ - $args \\ - $fastq > ${prefix}.fq_lint.txt - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - fq: \$(echo \$(fq lint --version | sed 's/fq-lint //g')) - END_VERSIONS - """ -} diff --git a/modules/nf-core/fq/lint/meta.yml b/modules/nf-core/fq/lint/meta.yml deleted file mode 100644 index aaa7caa..0000000 --- a/modules/nf-core/fq/lint/meta.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: "fq_lint" -description: fq lint is a FASTQ file pair validator. -keywords: - - lint - - fastq -tools: - - "fq": - description: "fq is a library to generate and validate FASTQ file pairs." - homepage: "https://github.com/stjude-rust-labs/fq" - documentation: "https://github.com/stjude-rust-labs/fq" - tool_dev_url: "https://github.com/stjude-rust-labs/fq" - licence: "['MIT']" -input: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - fastq: - type: file - description: FASTQ file list - pattern: "*.fastq{,.gz}" -output: - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" -authors: - - "@adamrtalbot" -maintainers: - - "@adamrtalbot" diff --git a/modules/nf-core/fq/lint/tests/main.nf.test b/modules/nf-core/fq/lint/tests/main.nf.test deleted file mode 100644 index bd83324..0000000 --- a/modules/nf-core/fq/lint/tests/main.nf.test +++ /dev/null @@ -1,63 +0,0 @@ -nextflow_process { - - name "Test Process FQ_LINT" - script "../main.nf" - process "FQ_LINT" - - tag "modules" - tag "modules_nfcore" - tag "fq" - tag "fq/lint" - - test("test_fq_lint_success") { - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ [ id:'test', single_end:false ], // meta map - [ 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 process.out.lint.get(0).get(1) ==~ ".*/test.fq_lint.txt" }, - { assert path(process.out.lint.get(0).get(1)).getText().contains("fq-lint start") }, - { assert path(process.out.lint.get(0).get(1)).getText().contains("read 100 records") }, - { assert path(process.out.lint.get(0).get(1)).getText().contains("fq-lint end") }, - ) - } - - } - - test("test_fq_lint_fail") { - when { - params { - outdir = "$outputDir" - } - process { - """ - input[0] = [ [ id:'test', single_end:false ], // meta map - [ file(params.test_data['sarscov2']['illumina']['test_1_fastq_gz'], checkIfExists: true), - file(params.test_data['candidatus_portiera_aleyrodidarum']['illumina']['test_2_fastq_gz'], checkIfExists: true) ] - ] - """ - } - } - - then { - assertAll ( - { assert !process.success }, - { assert snapshot(process.out).match() }, - ) - } - - } - -} diff --git a/modules/nf-core/fq/lint/tests/main.nf.test.snap b/modules/nf-core/fq/lint/tests/main.nf.test.snap deleted file mode 100644 index 18be683..0000000 --- a/modules/nf-core/fq/lint/tests/main.nf.test.snap +++ /dev/null @@ -1,52 +0,0 @@ -{ - "test_fq_lint_fail": { - "content": [ - { - "0": [ - - ], - "1": [ - - ], - "lint": [ - - ], - "versions": [ - - ] - } - ], - "timestamp": "2023-10-17T11:27:49.533776" - }, - "test_fq_lint_success": { - "content": [ - { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fq_lint.txt:md5,ad97318ef85cf80dcc6312cfa726709c" - ] - ], - "1": [ - "versions.yml:md5,10ce0730904e55dc8827a894c7042c8c" - ], - "lint": [ - [ - { - "id": "test", - "single_end": false - }, - "test.fq_lint.txt:md5,ad97318ef85cf80dcc6312cfa726709c" - ] - ], - "versions": [ - "versions.yml:md5,10ce0730904e55dc8827a894c7042c8c" - ] - } - ], - "timestamp": "2023-10-17T11:27:38.071998" - } -} \ No newline at end of file diff --git a/modules/nf-core/fq/lint/tests/tags.yml b/modules/nf-core/fq/lint/tests/tags.yml deleted file mode 100644 index 9c9c323..0000000 --- a/modules/nf-core/fq/lint/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -fq/lint: - - modules/nf-core/fq/lint/** diff --git a/nextflow.config b/nextflow.config index a663bdb..6c42d72 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,10 +24,8 @@ params { multiqc_methods_description = null - // FASTP options - adapters = null - save_trimmed_fail = false - save_merged = false + // Trimming + skip_trim = false // Boilerplate options outdir = null diff --git a/nextflow_schema.json b/nextflow_schema.json index b1382bd..b140407 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -74,30 +74,6 @@ } } }, - "fastp_options": { - "title": "Fastp options", - "type": "object", - "description": "Parameters for running fastp", - "default": "", - "properties": { - "adapters": { - "type": "string", - "fa_icon": "fas fa-cut", - "description": "Fasta file with adapter sequences to be trimmed." - }, - "save_trimmed_fail": { - "type": "boolean", - "fa_icon": "far fa-save", - "description": "Option to save trimmed reads." - }, - "save_merged": { - "type": "boolean", - "fa_icon": "far fa-save", - "description": "Option to save merged reads." - } - }, - "fa_icon": "fas fa-cut" - }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -300,9 +276,6 @@ { "$ref": "#/definitions/reference_genome_options" }, - { - "$ref": "#/definitions/fastp_options" - }, { "$ref": "#/definitions/institutional_config_options" }, diff --git a/workflows/demo.nf b/workflows/demo.nf index 9fb4e72..7fa9299 100644 --- a/workflows/demo.nf +++ b/workflows/demo.nf @@ -38,12 +38,14 @@ workflow DEMO { ch_versions = ch_versions.mix(FASTQC.out.versions.first()) // - // MODULE: Run FQ_LINT + // MODULE: Run SEQTK_TRIM // - SEQTK_TRIM ( - ch_samplesheet - ) - ch_versions = ch_versions.mix(SEQTK_TRIM.out.versions.first()) + if (!params.skip_trim) { + SEQTK_TRIM ( + ch_samplesheet + ) + ch_versions = ch_versions.mix(SEQTK_TRIM.out.versions.first()) + } // // Collate and save software versions From 40db1d7b1146f84526b34a86b5e7b48de315586a Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 12:42:49 +0200 Subject: [PATCH 04/11] Update schema --- nextflow_schema.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/nextflow_schema.json b/nextflow_schema.json index b140407..1c51049 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -74,6 +74,20 @@ } } }, + "process_skipping_options": { + "title": "Process skipping options", + "type": "object", + "description": "Options to skip various steps within the workflow.", + "default": "", + "fa_icon": "fas fa-forward", + "properties": { + "skip_trim": { + "type": "boolean", + "description": "Skip trimming fastq files with seqtk", + "fa_icon": "fas fa-chevron-circle-right" + } + } + }, "institutional_config_options": { "title": "Institutional config options", "type": "object", @@ -276,6 +290,9 @@ { "$ref": "#/definitions/reference_genome_options" }, + { + "$ref": "#/definitions/process_skipping_options" + }, { "$ref": "#/definitions/institutional_config_options" }, From a3624b32769d52412a66abd1fcfae8f14369b7b0 Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 13:07:39 +0200 Subject: [PATCH 05/11] Adding docs --- docs/output.md | 11 ++++------- workflows/demo.nf | 1 + 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/output.md b/docs/output.md index f8f0f90..92dc0c4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -11,7 +11,7 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: - [FastQC](#fastqc) - Raw read QC -- [fastp](#fastp) - Adapter and quality trimming +- [seqtk](#seqtk) - Processing sequences in the FASTA or FASTQ format. - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution @@ -38,20 +38,17 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They may contain adapter sequence and potentially regions with low quality. ::: -### fastp +### seqtk
Output files - `fastp/` - - `*.fastp.html`: Trimming report in html format. - - `*.fastp.json`: Trimming report in json format. - - `*.fastp.log`: Trimming log file. - - `*.fastq.gz`: If `--save_trimmed` is specified, FastQ files **after** adapter trimming will be placed in this directory. + - `*.fastq.gz`: Trimmed FASTQ files.
-[fastp](https://github.com/OpenGene/fastp) is a tool designed to provide fast, all-in-one preprocessing for FastQ files. It has been developed in C++ with multithreading support to achieve higher performance. fastp can be used in this pipeline for standard adapter trimming and quality filtering. +[seqtk](https://github.com/lh3/seqtk) is a fast and lightweight tool for processing sequences in the FASTA or FASTQ format. It seamlessly parses both FASTA and FASTQ files which can also be optionally compressed by gzip. ### MultiQC diff --git a/workflows/demo.nf b/workflows/demo.nf index 7fa9299..a5e06f5 100644 --- a/workflows/demo.nf +++ b/workflows/demo.nf @@ -44,6 +44,7 @@ workflow DEMO { SEQTK_TRIM ( ch_samplesheet ) + ch_trimmed = SEQTK_TRIM.out.reads ch_versions = ch_versions.mix(SEQTK_TRIM.out.versions.first()) } From fe9e6100e496c8e273e7a8ad74607abe3ace5291 Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 13:56:27 +0200 Subject: [PATCH 06/11] Update images --- README.md | 2 +- docs/images/nf-core-demo-subway.png | Bin 22934 -> 20299 bytes docs/images/nf-core-demo-subway.svg | 40 +++++++++++++--------------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 1bd32f0..6829942 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ ![nf-core/demo metro map](docs/images/nf-core-demo-subway.png) 1. Read QC ([`FASTQC`](https://www.bioinformatics.babraham.ac.uk/projects/fastqc/)) -2. Adapter and quality trimming ([`FASTP`](https://github.com/OpenGene/fastp)) +2. Adapter and quality trimming ([`SEQTK_TRIM`](https://github.com/lh3/seqtk)) 3. Present QC for raw reads ([`MULTIQC`](http://multiqc.info/)) ## Usage diff --git a/docs/images/nf-core-demo-subway.png b/docs/images/nf-core-demo-subway.png index 1a2ebcdb44a20c13f834c87885f4319e268f5722..e7914fec0302792b1724b6b8e327f6adbf44fd90 100644 GIT binary patch literal 20299 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 GAL2hv?au!I literal 22934 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

OrY>@dnXYJ)q0`UpJ4s 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 + + + - - - - - - + + + - - - - - - - - - - - - + + + + + - + + + + - - + + - + From cf9e948b9c420d4f0c62ae8411cd68926a5d748f Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 15:50:15 +0200 Subject: [PATCH 07/11] Prepare for sync --- conf/modules.config | 4 ++-- modules.json | 26 +++++++------------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index b9a8299..676a80f 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -28,11 +28,11 @@ process { } - withName: 'FQ_LINT' { + withName: 'SEQTK_TRIM' { publishDir = [ path: { "${params.outdir}/fq/${meta.id}" }, mode: params.publish_dir_mode, - pattern: "*.{txt}" + pattern: "*.{fastq.gz}" ] } diff --git a/modules.json b/modules.json index 4634b34..67933c1 100644 --- a/modules.json +++ b/modules.json @@ -8,23 +8,17 @@ "fastqc": { "branch": "master", "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "multiqc": { "branch": "master", "git_sha": "b7ebe95761cd389603f9cc0e0dc384c0f663815a", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] }, "seqtk/trim": { "branch": "master", "git_sha": "71c669747731cbc360dc220069c9f83015558c07", - "installed_by": [ - "modules" - ] + "installed_by": ["modules"] } } }, @@ -33,26 +27,20 @@ "utils_nextflow_pipeline": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] }, "utils_nfvalidation_plugin": { "branch": "master", "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa", - "installed_by": [ - "subworkflows" - ] + "installed_by": ["subworkflows"] } } } } } -} \ No newline at end of file +} From 3aebf65c550a28bf8972b1c33e8ea7665e940cf1 Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Fri, 31 May 2024 15:50:33 +0200 Subject: [PATCH 08/11] Template update for nf-core/tools version 2.14.1 --- assets/nf-core-demo_logo_light.png | Bin 70502 -> 70504 bytes docs/images/nf-core-demo_logo_dark.png | Bin 24773 -> 24802 bytes docs/images/nf-core-demo_logo_light.png | Bin 21507 -> 21507 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/nf-core-demo_logo_light.png b/assets/nf-core-demo_logo_light.png index 0ef9fa5dd6448acf82a09f81e9170b43f09e8d46..2543e503f6ce36751c848248e716828ce00829f5 100644 GIT binary patch delta 27283 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 xSfijA6{pNM@e*hZiRE_`u diff --git a/docs/images/nf-core-demo_logo_dark.png b/docs/images/nf-core-demo_logo_dark.png index 5e22400718cf36ae8245720c95734200bb455901..44f9995555ec59c4889badcc89511d95f9e0cb0e 100644 GIT binary patch delta 24181 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 diff --git a/docs/images/nf-core-demo_logo_light.png b/docs/images/nf-core-demo_logo_light.png index c9d0c4b90dbc58dd31cdb43e995b813c69205420..b945f8cdd07254b43db5264467edd72ab9090176 100644 GIT binary patch delta 20682 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

-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 From 39a88e7d53fb252a61e6d13698ffee40dccea333 Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Tue, 11 Jun 2024 10:13:51 +0200 Subject: [PATCH 09/11] Update output docs --- docs/output.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output.md b/docs/output.md index 92dc0c4..411fdf5 100644 --- a/docs/output.md +++ b/docs/output.md @@ -43,7 +43,7 @@ The FastQC plots displayed in the MultiQC report shows _untrimmed_ reads. They m

Output files -- `fastp/` +- `fq/` - `*.fastq.gz`: Trimmed FASTQ files.
From 7ce6e7fdbfd5c0cb9f7a81a46a70debee6b1ece4 Mon Sep 17 00:00:00 2001 From: Christopher Hakkaart Date: Wed, 12 Jun 2024 20:58:50 +0200 Subject: [PATCH 10/11] Update nextflow.config --- nextflow.config | 1 - 1 file changed, 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 7a3b005..28b04a5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -24,7 +24,6 @@ params { max_multiqc_email_size = '25.MB' multiqc_methods_description = null - // Trimming skip_trim = false From 1e85529ae0380cf1917f7c4000958ff7c2f0abe5 Mon Sep 17 00:00:00 2001 From: christopher-hakkaart Date: Wed, 19 Jun 2024 16:01:44 +0200 Subject: [PATCH 11/11] Add change log --- CHANGELOG.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd9cb42..4b635d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,14 +3,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## v1.0dev - [date] +## 1.0.0 2024-06-19 -Initial release of nf-core/demo, created with the [nf-core](https://nf-co.re/) template. +### Credits + +Special thanks to the following for their reviews and assistance: + +- [Maxime Garcia](https://github.com/maxulysse) +- [Friederike Hanssen](https://github.com/FriederikeHanssen) ### `Added` -### `Fixed` +- `nf-core/seqtk/trim` module +- `skip_trim` parameter -### `Dependencies` +## v1.0dev - 2024-05-5 -### `Deprecated` +Initial release of nf-core/demo, created with the [nf-core](https://nf-co.re/) template.